2010-11-26 9 views
1

に私はCを取得しようとしている次のコードを持っている:のCreationDateノード:JavascriptのXMLパーサー:どのように持つノードを取得するための「:」名

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にあるノードを持つ配列の代わりに。私はこれが ":"記号のために起こったと思います。

エスケープ方法はありますか?

注:childNodesなどでの使用を提案しないでください。これは、私のXMLが複合体を検証するので(これは単なるサンプルです)、今後変更される可能性が高く、タグ名に依存することができるので、私のためには機能しません。

ありがとうございます!

答えて

10

cc:CreationDateは、接頭辞XML namespaceを示します。名前空間接頭辞は、名前空間のショートカットです。名前空間は、xmlns:c属性を持つドキュメントのどこかで定義する必要があります。しかし、あなたの文書では名前空間の定義がありません。

だから、次のようになります。接頭辞cは、名前空間http://my.namespaceに割り当てられている。この例では

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>'; 

CreationDateタグの接頭辞はcなので、名前空間http://my.namespaceに属します。

その後、あなたはのCreationDate要素を照会するために、名前空間を意識getElementsByTagNameNS()機能を使用することができます。

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

あなたは本当の名前空間名ではなく接頭辞を渡す必要が最初のパラメータとして。

関連する問題