Wie das Parsen der Soap-Umschlag in Golang ?

Ich bin neu in golang und Seife und Probleme bei der Analyse der soap-Nachricht.

1.Ich habe eine Soap-Nachricht

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Body>
<activationPack_completeResponse"http://tempuri.org/">
<activationPack_completeResult xsi:type="xsd:string">Active</activationPack_completeResult>
</activationPack_completeResponse>
</soap:Body>
</soap:Envelope>

Nun, wie soll ich Unmarshal Sie in golang, was sollte mein struct-Deklaration für tag-Soap-Umschlag.

Habe ich eine Struktur wie folgt:

type MyRespEnvelope struct {
    XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/Envelope"`
    Soap    *Body
}
type Body struct {
    XMLName     xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/Body"`
    GetResponse *ActivationPack_CompleteResponse
}
type ActivationPack_CompleteResponse struct {
    XMLName xml.Name `xml:"activationPack_completeResponse"`
    Id      string   `xml:"xmlns,attr"`
    MyVar   string   `xml:"activationPack_completeResult"`
} 

Aber ich bin immer Fehler wie folgt:

error: expected element <Envelope> in name space http://schemas.xmlsoap.org/soap/envelope/but have soap*stopped,reason="end-stepping-range",frame={addr="0x0000000000401211",func="main.UnmarshalFirstDitto",args=[{name="data",value="\"\\nNotice: Undefined variable: area in /var/www/nusoap/dittotv.php on line 25\\n\\nNotice: Undefined variable: area in /var/www/nusoap/dittotv.php on line 27\\n\\nNotice: Undefined variable: area in /var/www/nu\"..."}],file="/media/winshare/Golang/WorkSpace/src/DittoTv/ditto.go",fullname="/media/winshare/Golang/WorkSpace/src/DittoTv/ditto.go",line="60"},thread-id="1",stopped-threads="all",core="0"

Also mir bitte jemand sagen, wie sollte ich erklären, meine Struktur so, dass ich in der Lage bin zum Parsen der soap-Nachricht.

  • Sind Sie sicher, dass das Dokument, das Sie versuchen zu analysieren, ist eigentlich XML? Die Fehlermeldung macht es klingen wie Sie versuchen zu analysieren, eine (nicht-XML -) Fehler von einem PHP-Skript
  • Ja, bin ich. Aber für mein wissen, in welchem Bereich fühlen Sie sich, dass php Fehler Rückkehr
  • Teil der Fehler liest args=[{name="data",value="\"\\nNotice: Undefined variable: area in /var/www/nusoap/dittotv.php on line 25\\n...
  • Ok, lassen Sie mich überprüfen Sie es einmal
  • Du hattest Recht ich habe die Feste gleich in mein php-Skript, aber auch jetzt bin ich immer der annähernd gleiche Fehler
  • Meine bzw Xml-Handy-Nummer Typ Zeichenfolge <?xml version="1.0" encoding="UTF-8"?><soap:Envelope SOAP-ENV:encodingStyle="schemas.xmlsoap.org/soap/encoding" xmlns:SOAP-ENV="schemas.xmlsoap.org/soap/envelope" xmlns:xsd="w3.org/2001/XMLSchema" xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="schemas.xmlsoap.org/soap/encoding/... xsi:type="xsd:string">9650104435</activationPack_completeResult></activationPack_completeResponse></soap:Body></soap:Envelope>
  • Erhaltene Fehler: Fehler: expected element <Umschlag> in name space schemas.xmlsoap.org/soap/envelope aber haben soap*stopped,reason="end-stepping-range",frame={addr="0x0000000000401211",func="main.UnmarshalFirstDitto",args=[{name="data",value="\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><soap:Envelope SOAP-ENV:encodingStyle=\\\"schemas.xmlsoap.org/soap/encoding\\\" xmlns:SOAP-ENV=\\\"schemas.xmlsoap.org/soap/envelope\\\" xmlns:xsd=\\\"www\"..."}]
  • @JamesHenstridge ,file="/media/winshare/Golang/WorkSpace/src/DittoTv/ditto.go",fullname="/media/winshare/Golang/WorkSpace/src/DittoTv/ditto.go",line="60"},thread-id="1",stopped-threads="all",core="0"
  • Gibt es eine xmlns:soap Attribut auf der obersten Ebene <soap:Envelope> element? Ich sehe es nicht auf der Beispiel-Nachricht in der Frage, und es ist erforderlich, um das Dokument korrekt zu analysieren.
  • Nein, aber es ist xmlns:SOAP-ENV-Feld, das erzeugt wird von nusoap PHP
  • Das ist nicht, wie XML-namespaces arbeiten. Um die soap: Präfix für Elemente und Attribute, es muss eine xmlns:soap Attribut verbindlich das Präfix für einen namespace-URI. Die xmlns:SOAP-ENV Attribut würde nutzen lassen, z.B. <SOAP-ENV:Envelope>. Vielleicht versuchen Sie füttern Sie das Dokument, um die xmllint - tool, um sicherzustellen, dass es gültig ist.
  • Habe ich geändert nusoap.php Und meine xml-Antwort ist <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="schemas.xmlsoap.org/soap/envelope" xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns:xsd="w3.org/2001/... xsi:type="xsd:string">9650104435</activationPack_completeResult></activationPack_completeResponse></soap:Body></soap:Envelope>
  • Aber jetzt bin ich immer folgenden Fehler " error: XML syntax-Fehler in Zeile 1: erwartet Attribut name in element*stopped,reason="end-stepping-range",frame={addr="0x0000000000401026",func="main.FirstDitto",args=[],file="/media/winshare/Golang/WorkSpace/src/DittoTv/ditto.go",fullname="/media/winshare/Golang/WorkSpace/src/DittoTv/ditto.go",line="52"},thread-id="1",stopped-threads="all",core="0" ich bin neu in der php-soap-und golang bitte helfen
  • Haben Sie versucht mit der das Dokument durch xmllint um zu sehen, ob es tatsächlich gültig?

InformationsquelleAutor user2383973 | 2014-05-13
Schreibe einen Kommentar