JavaScript XMLパーサー:名前で「:」を持っているノードを取得する方法
-
28-09-2019 - |
質問
cを取得しようとしている次のコードがあります: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'));
残念ながら、XMLにあるノードを備えた配列の代わりに、空の配列を返しています。これは「:」シンボルのために引き起こされると思います。
それを逃れる方法はありますか?
注:子育てやこのようなものでの使用を提案しないでください。私のXMLが複雑であることを確認しているため(ここには単なるサンプルです)、将来的に変更される可能性が高く、タグ名のみに頼ることができるため、これは私にとっては機能しません。
ありがとう!
解決
c
の c:CreationDate
を示します XMLネームスペース プレフィックス。名前空間プレフィックスは、名前空間のショートカットにすぎません。名前空間は、ドキュメントのどこかで定義する必要があります xmlns:c
属性。ただし、ドキュメントでは、名前空間の定義が欠落しています。
だから、それは次のように見えるはずです:
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>';
また
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>';
この例では、プレフィックス c
名前空間に割り当てられます http://my.namespace
. 。 CreationDate
タグにはプレフィックスが付けられています c
, 、そのため、名前空間に属します http://my.namespace
.
次に、名前空間を使用することができます getElementsByTagNameNS()
creationdate要素をクエリする関数:
console.log(xml.getElementsByTagNameNS('http://my.namespace', 'CreationDate'));
最初のパラメーターとして、プレフィックスではなく、実際の名前空間名を渡す必要があります。
所属していません StackOverflow