analyseur XML Javascript: comment obtenir les nœuds qui ont « : » au nom
-
28-09-2019 - |
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!
La solution
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.