JavaScript XMLパーサー:名前で「:」を持っているノードを取得する方法

StackOverflow https://stackoverflow.com/questions/4288232

  •  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が複雑であることを確認しているため(ここには単なるサンプルです)、将来的に変更される可能性が高く、タグ名のみに頼ることができるため、これは私にとっては機能しません。

ありがとう!

役に立ちましたか?

解決

cc: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'));

最初のパラメーターとして、プレフィックスではなく、実際の名前空間名を渡す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top