Wie kann ich entfernen Sie einen namespace aus einem XML-Dokument?
In meine Flex-Anwendung, ich nenne mehrere .NET, WebServices, XML zurückgeben. Aber diese WebServices alle Rückgabe XML mit namespace. Kann ich nicht Lesen/Parsen der XML ohne Verweis auf die Namespaces, was bedeutet, dass ich noch die folgenden Zeilen von code in jeder Klasse, ruft eine WebService:
private namespace PCRWebServices = "xxx.somename.web.services";
use namespace PCRWebServices;
Ich würde gerne die Notwendigkeit beseitigen, für die diese statische/hart codierter Logik einfach: Lesen von XML aus WebService.
Gibt es eine Möglichkeit, zu "entfernen" den namespace aus der XML, so dass ich es Lesen kann wie ein "normales" XML-Dokument?
Habe ich eine Klasse, die ich erweitern für jeden WebService-Aufruf, verarbeitet die Ergebnisse und Fehler:
private function faultHandler(event:FaultEvent):void
{
}
private function resultHandler(event:ResultEvent):void
{
var resultXML:XML = new XML(event.result);
}
Ich möchte etwas Logik, um das Ergebnis-handler "konvertieren" die XML-Datei. Irgendwelche Ideen?
Das, was trace(resultXML)
gibt:
<GetDataResult xmlns="xxx.somename.web.services">
<DataSet>
<Data>
<IdNmb>15</IdNmb>
<NameTxt>Hello</NameTxt>
</Data>
<Data>
<IdNmb>16</IdNmb>
<NameTxt>World</NameTxt>
</Data>
<Status>
<Status>Success</Status>
</Status>
<ReturnCode>
<ReturnCode>0</ReturnCode>
</ReturnCode>
</DataSet>
</GetDataResult>
InformationsquelleAutor Eric Belair | 2009-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine andere regex-Lösung. Es wird entfernen Sie mehrere namespaces, nicht nur eine.
InformationsquelleAutor Jacob Poul Richardt
Ich fand diese Problemumgehung, mit RegEx zum entfernen des namespaces aus dem XMLString.
http://brianmriley.wordpress.com/2008/03/14/remove-xml-namespaces-in-flex-or-as3/
Hier ist, wie ich es umgesetzt:
Danke. Nicht die Notwendigkeit sehen, für den downvote, wie das meine Frage beantwortet "namespace". Ich werde upvote deine Antwort sowieso.
Nur ein bisschen kürzer: var xmlString:String = " xml.toXMLString(); xmlString = xmlString.replace(/xmlns="[^"]+"/g, "); return new XML(xmlString);
InformationsquelleAutor Eric Belair
Versuchen Sie die folgende Lösung. Ich fand es besser als das ersetzen der string mit regexp.
InformationsquelleAutor Tamas
Wenn Sie angeben, use namespace Sie festlegen, dass als Standard-namespace verwendet, anstelle von aufrufen, übergeben Sie den namespace, wenn Sie versuchen, Zugriff auf ein element
InformationsquelleAutor JD Isaacks
Ich würde nicht mit den hacks zu entfernen, die namespaces von xml-Code als Zeichenfolge. Das ist ein hässlicher hack (und nicht zu vergessen ineffizient). Was Sie tun können, um zu vermeiden, hartzucodieren die Namespaces in Ihrem code zu Fragen, der das xml-Objekt, was es ist Standard-namespace und verwenden. Wie diese:
InformationsquelleAutor dalore
Während ich damit einverstanden, dass der geeignete Weg, um die Interaktion mit der XML ist, indem es durch seinen namespace, wenn Sie absichtlich versuchen, Sie zu übersetzen oder zu konvertieren, Inhalte von XML von einem Namensraum in einen anderen (zum Beispiel, FXG zu MXML -) manchmal muss man nach unten und schmutzig und hacken, den XML-Code als Zeichenfolge. Dies ist keineswegs der elegantesten und wenn es ein richtiger Weg, dies zu tun, ich bin offen dafür.
Leider, von was ich gelesen habe, sieht es aus wie Sie können nicht entfernen Sie die Standard-oder zuletzt namespace eines XML-Objekts.
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/XML.html#removeNamespace%28%29
InformationsquelleAutor Blake Barrett
Ich habe versucht ein paar von den Lösungen, die hier gepostet mit marginalen Erfolg.
Hier ist was für mich gearbeitet...
Lassen Sie sich die bedingten entfernen Sie alle namespaces.
Fand ich das erstellen eines neuen
Namespace
Objekt nötig zu sein, da, wenn Sie pass in diens
variable ist, scheint es doch dazu gezwungen eine Zeichenfolge, die gibt denuri
Eigenschaft, die hatte den Effekt, dass man die Präfixe in meinem XML-Daten.Ich fand es notwendig, fügen Sie diese code-block, als auch, entfernen Sie alle Spuren von der original-namespaces (mit den obigen code produziert seltsame "aaa" namespaces nach namespace entfernen).
InformationsquelleAutor Pup
Ich erinnere mich, dass einige Probleme mit dieser. Kann mich nicht erinnern genau, wie ich gelöst, aber ich vermute, dass die removeNamespace Funktion wäre ein guter Anfang.
Vielleicht so etwas wie:
Habe ich noch nicht getestet der code überhaupt, nur aus der Spitze von meinem Kopf.
Können Sie hier mehr Lesen:
http://help.adobe.com/en_US/AS3LCR/Flash_10.0/XML.html#removeNamespace()
Du hast Recht, apperently es funktioniert nicht mit allen namesspaces (siehe doc). Füge ich eine neue Lösung.
InformationsquelleAutor Jacob Poul Richardt