2

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 にあるノードの配列ではなく、空の配列を返しています。これは「:」記号が原因だと思います。

それを逃れる方法はありますか?

注: childNodes またはこのようなものでの使用を提案しないでください。私のxmlは検証が複雑であるため(これは単なるサンプルです)、将来的に変更される可能性が高く、タグ名にしか依存できないため、これは機能しません。

ありがとう!

4

1 に答える 1

11

cinc: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.namespaceCreationDateタグには接頭辞が付いているcため、名前空間に属しますhttp://my.namespace

次に、名前空間対応getElementsByTagNameNS()関数を使用して、CreationDate 要素を照会できます。

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

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

于 2010-11-26T21:09:30.323 に答える