2016-03-28 5 views
1

Ich benutze XSLTforms auf dem Server exist-db und ich versuche, eine Datei mit method = "post" ohne Glück überhaupt zu laden. Hier ist ein Beispiel des Modells:xsltforms submission method = "post": Unbekanntes XML-Wurzelelement

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xf="http://www.w3.org/2002/xforms"> 
<head> 
    <xf:model> 
     <xf:instance xmlns="" id="default"> 
      <data> 
       <x> 
        <a></a> 
        <b></b> 
        <c></c> 
       </x> 
      </data> 
     </xf:instance> 
     <xf:submission id="read-from-file" method="post" replace="instance" instance="default"> 
      <xf:resource value="'../data/test.xml'"></xf:resource> 
     </xf:submission> 
    </xf:model> 
</head> 

Und hier ist die test.xml ich einreichen bin versucht:

<data> 
    <x> 
    <a>test</a> 
    <b>test</b> 
    <c>test</c> 
    </x> 
</data> 

Wenn ich die Vorlage auslösen, erhalte ich Fehler:

xsltforms.js:8115 POST ../data/test.xml 400 (Unknown XML root element: data)

Wenn stattdessen "get" -Methode verwendet wird, funktioniert alles super, solange die Datei klein genug ist - wenn ich versuche, eine größere Datei mit method = "get" zu laden, wird sie geladen, aber nachdem sie einmal geladen wurde und versuchen um es neu zu laden, erhalte ich den Fehler "414 (Anfrage-URI zu lang) ". Ich suchte nach einer Antwort und der Rat war, dass in diesem Fall der richtige Weg ist, "Post" zu verwenden. Ich bin neu in xforms und offensichtlich mache ich etwas falsch, also brauche ich Hilfe, um diese Arbeit zu machen ... Vielen Dank im Voraus!

Antwort

2

Wenn es um Probleme bei der Übermittlung geht, ist es interessant, einen Browser-Debugger zu verwenden, nur um zu überprüfen, was gesendet und was empfangen wird.

Die GET-Methode ist eindeutig diejenige, die verwendet wird, um einen Dateiinhalt zu erhalten, während PUT und POST dazu da sind, Inhalte in eine Datei zu pushen.

Standardmäßig wird die Standardinstanz als GET-Parameter serialisiert. Ich denke, dass dies der Grund dafür ist, dass die URI zu lange wachsam ist. Da Sie nur einen Dateiinhalt erhalten möchten, können Sie es bitte erneut versuchen, wenn das Attribut "serialization" auf "none" gesetzt ist.

+0

Vielen Dank! Du hast meinen Tag gerettet :) Und ja - das Verhalten in Firebug und Chrome DevTools zu überprüfen war das erste, was ich ausprobiert habe ... Ich sah die lange URI, aber ich wusste nicht, wie ich es loswerden sollte und dass die Instanz wird als GET-Parameter serialisiert. Zunächst habe ich es geschafft, alle Elemente vor der Übergabe zu umgehen, aber als die Dateigröße anstieg, funktionierte es nicht mehr. Für jetzt scheint es Serialisierung = "none" macht den Job. Ich hoffe, dass Sie mit diesem Problem nicht noch einmal belästigt werden müssen. – nassoo