在MSXML中使用selectSingleNode获取XML节点时出错

时间:2012-08-08 08:26:51

标签: xml xpath domdocument

使用MSXML中的selectSingleNode

获取XML节点

我试图在下面的XML中获取title字段,但不能

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

1 个答案:

答案 0 :(得分:0)

Xpath表达式必须(否则注册名称空间毫无意义):

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

此外,您只需注册一个名称空间,因为前缀"rg""r"碰巧绑定到同一名称空间。

您注册的前缀不需要与XML文档中使用的任何前缀相同 - 它可以是"x",然后表达式为:

//x:Group/x:license/x:title