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 einexmlns:soap
Attribut verbindlich das Präfix für einen namespace-URI. Diexmlns:SOAP-ENV
Attribut würde nutzen lassen, z.B.<SOAP-ENV:Envelope>
. Vielleicht versuchen Sie füttern Sie das Dokument, um diexmllint
- 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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre XML war ungültig, nehme ich an, es ist eine schlechte copy-paste. Ich korrigierte es, Zeile 4:
<activationPack_completeResponse"http://tempuri.org/">
-><activationPack_completeResponse Id="http://tempuri.org/">
Ihre Typen waren falsch. in
MyRespEnvelope
rufen Sie dieBody
structSoap
. Ohne die Definition der xml-name-du wirst nicht alles bekommen. Ein einfacher fix ist, ändern Sie den Namen vonSoap
zuBody
.Ich bin kein Experte in XML, aber ich glaube, Sie waren etwas falsch mit namespaces.
vereinfachen Sie Ihre Typen ein wenig, hier ist ein funktionierendes Beispiel: http://play.golang.org/p/957GWzfdvN
Hinweis: In dem code, den ich zusammen gestellt, die ich nicht verwenden Zeiger auf Strukturen, aber die Strukturen selbst. Sie können entweder je nachdem, wie Sie beabsichtigen, es zu benutzen, und Ihre Einstellungen, die ich Schätze.