Comment puis-je supprimer un espace de noms à partir d'un document XML?
Dans mon application Flex, j'ai appeler plusieurs .NET, WebServices qui renvoient des données XML. Cependant, ces WebServices toutes les renvoyer du XML avec un espace de noms. Je ne peut pas lire/parse le XML sans faire référence à l'espace de noms, ce qui signifie que je dois inclure les lignes de code suivantes dans chaque Classe qui appelle un WebService:
private namespace PCRWebServices = "xxx.somename.web.services";
use namespace PCRWebServices;
Je voudrais éliminer le besoin de ce statiques/codée en dur de la logique tout simplement pour lire les données XML à partir d'un WebService.
Est-il possible de "supprimer" l'espace de noms de XML, de sorte que je puisse le lire comme un "normal" document XML?
J'ai une Classe que je forme pour chaque appel WebService qui gère les résultats et les défauts:
private function faultHandler(event:FaultEvent):void
{
}
private function resultHandler(event:ResultEvent):void
{
var resultXML:XML = new XML(event.result);
}
Je voudrais ajouter un peu de logique à la suite de gestionnaire de "convertir" le XML. Des idées?
Ce que trace(resultXML)
retourne:
<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>
OriginalL'auteur Eric Belair | 2009-03-23
Vous devez vous connecter pour publier un commentaire.
Voici une autre expression régulière solution. Il va supprimer plusieurs espaces de noms, pas seulement un.
OriginalL'auteur Jacob Poul Richardt
J'ai trouvé cette solution de contournement, en utilisant les RegEx pour supprimer les espaces de noms à partir de la XMLString.
http://brianmriley.wordpress.com/2008/03/14/remove-xml-namespaces-in-flex-or-as3/
Voici comment j'ai mis en œuvre:
Merci. Ne vois pas la nécessité pour le downvote, comme cela a répondu à ma question sur les "Un espace de noms". Je vais upvote votre réponse de toute façon.
Juste un peu plus court: var xmlString:String = xml.toXMLString(); xmlString = xmlString.replace(/xmlns="[^"]+"/g, "); return new XML(xmlString);
OriginalL'auteur Eric Belair
Essayez la solution ci-dessous. Je l'ai trouvé mieux que de remplacer la chaîne de caractères avec des regexp.
OriginalL'auteur Tamas
Lorsque vous spécifiez utilisation de l'espace de noms vous êtes paramètre que l'espace de noms par défaut, au lieu de l'appel que vous pouvez passer de l'espace de noms lorsque vous essayez d'accéder à un élément
OriginalL'auteur JD Isaacks
Je ne voudrais pas utiliser les hacks que supprimer les espaces de noms xml comme une chaîne de caractères. C'est un vilain hack (et de ne pas mentionner inefficace). Ce que vous pouvez faire pour éviter de coder en dur l'espace de noms dans votre code est à demander à l'objet xml ce que c'est l'espace de noms par défaut est et l'utiliser. Comme ceci:
OriginalL'auteur dalore
Alors que je suis d'accord que la bonne façon d'interagir avec le XML est de l'aborder par le biais de son espace de noms, lorsque vous êtes intentionnellement essayer de traduire ou convertir du contenu XML d'un espace de noms à l'autre (par exemple, FXG pour MXML) parfois, vous avez à descendre et sale et hack le XML comme une chaîne de caractères. Ce n'est pas le plus élégant et si il y a un plus bonne façon de le faire, je suis ouvert à elle.
Malheureusement, d'après ce que j'ai lu, il semble que vous ne pouvez pas supprimer la valeur par défaut ou le dernier espace de noms à partir d'un objet XML.
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/XML.html#removeNamespace%28%29
OriginalL'auteur Blake Barrett
J'ai essayé quelques solutions posté ici avec peu de succès.
Voici ce qui a fonctionné pour moi...
Vous pouvez laisser de côté le conditionnel pour supprimer tous les espaces de noms.
J'ai trouvé de la création d'un nouveau
Namespace
objet nécessaire parce que si vous passez dans lens
variable-est, il semble être contraints à une Chaîne, qui renvoie leuri
de la propriété, ce qui a eu pour effet de laisser les préfixes dans mon XML de données.J'ai trouvé nécessaire d'ajouter ce prochain bloc de code, ainsi, pour enlever toutes les traces de l'origine des espaces de noms (exécute le code ci-dessus produit d'étranges "aaa" espaces de noms après la suppression de l'espace de noms).
OriginalL'auteur Pup
Je me souviens avoir eu quelques problèmes avec cette. Ne peut pas se souvenir excatly comment j'ai résolu, mais j'imagine que l'removeNamespace fonction serait un bon début.
Peut-être quelque chose comme:
Je n'ai pas testé le code, juste au dessus de ma tête.
Vous pouvez en lire plus ici:
http://help.adobe.com/en_US/AS3LCR/Flash_10.0/XML.html#removeNamespace()
Vous avez raison, apperently il ne fonctionne pas avec tous les namesspaces (voir la doc). Je vais ajouter une nouvelle solution.
OriginalL'auteur Jacob Poul Richardt