1

MSXML で selectSingleNode を使用して XML ノードをフェッチする

以下の XML でタイトル フィールドを取得しようとしていますが、取得できません。

XML は

<?xml version="1.0"?>
<rg:Group xmlns:rg="urn:mpeg:mpeg21:2003:01-REL-R-NS">
<r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" Id="{b11f85f6-59c1-4c17-9c22-d951ac7257}"><r:title>XrML 2.1 License</r:title>
(some fields)
</r:license>
</rg:Group>

以下はXMLの私のコードです

var objXML = new ActiveXObject("MSXML2.DOMDocument.6.0");
objXML.async = false;
objXML.load("\\license.xml");
var ns="xmlns:rg='urn:mpeg:mpeg21:2003:01-REL-R-NS' +"xmlns:r='urn:mpeg:mpeg21:2003:01-REL-R-NS'"
objXML.setProperty("SelectionNamespaces", ns);
objXML.setProperty("SelectionLanguage", "XPath");
WScript.Echo("ns:(after setProperty())\n  "+objXML.getProperty("SelectionNamespaces"));

var node = objXML.selectSingleNode("//Group/license/title");
WScript.Echo("root: \n"+node.text); //returns null
4

1 に答える 1

0

Xpath 式は次のようにする必要があります(そうでない場合、名前空間の登録は無意味です)。

//r:Group/r:license/r:title

また、プレフィックス"rg""r"がたまたま同じ名前空間にバインドされているため、名前空間を 1 つだけ登録する必要があります。

登録するプレフィックスは、XML ドキュメントで使用されているプレフィックスと同じである必要はありません"x"

//x:Group/x:license/x:title
于 2012-08-08T13:34:45.463 に答える