Question

Je le code suivant où je suis en train d'obtenir le c: nœuds CreationDate:

 value = '<?xml version="1.0" encoding="UTF-8"?><content><c:CreationDate>2010-09-04T05:04:53Z</c:CreationDate></content>';

 xml = (new DOMParser()).parseFromString(value, 'text/xml');

 console.log(xml.getElementsByTagName('c:CreationDate'));

Malheureusement, il est de retour un tableau vide, au lieu d'un tableau avec le nœud qui est dans le fichier XML. Je pense que cela est dû à cause de la « : ». Symbole

Yat-il un moyen d'y échapper?

Remarque: S'il vous plaît, ne suggèrent pas l'utilisation sur childNodes ou des choses comme ça. Cela ne fonctionnera pas pour moi depuis mon xml est complexe vérifie (ici est juste un échantillon) et le changement le plus probable à l'avenir et je ne peut compter que dans le nom de la balise.

Merci!

Était-ce utile?

La solution

préfixe

Le c dans c:CreationDate désigne un espace de noms XML . Le préfixe d'espace de noms est seulement un raccourci pour l'espace de noms. L'espace de noms doit être défini quelque part dans le document avec un attribut xmlns:c. Mais dans votre document, la définition de l'espace de noms est manquant.

Il devrait ressembler à:

var value = '<?xml version="1.0" encoding="UTF-8"?>' +
            '<content>' +
            '  <c:CreationDate xmlns:c="http://my.namespace">2010-09-04T05:04:53Z</c:CreationDate>' +
            '</content>';

ou

var value = '<?xml version="1.0" encoding="UTF-8"?>' +
            '<content xmlns:c="http://my.namespace">' +
            '  <c:CreationDate>2010-09-04T05:04:53Z</c:CreationDate>' +
            '</content>';

Dans cet exemple, le préfixe c est attribué à l'espace de noms http://my.namespace. La balise CreationDate est préfixé avec c, il appartient à l'espace de noms http://my.namespace.

Ensuite, vous pouvez utiliser l'espace de noms courant fonction getElementsByTagNameNS() à la requête de l'élément CreationDate:

console.log(xml.getElementsByTagNameNS('http://my.namespace', 'CreationDate'));

En tant que premier paramètre, vous devez passer le vrai nom d'espace de noms et non le préfixe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top