我正在尝试为以下xml设置XPath查询:
<Assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="Assembly">
<Parts>
<Part>
<PartName>Example</PartName>
</Part>
</Parts>
<Assembly>
我需要PartName元素而我无法正确引用它,因为xml声明是一个节点而不是通常的
<?xml version="1.0"?>
有人可以帮我构建我的XPath吗?
答案 0 :(得分:2)
声明/注册命名空间并在XPath中使用命名空间前缀绝对是首选。
但是,如果您希望XPath在不注册命名空间的情况下工作,则可以使用以下任一XPath语句:
/*[local-name()='Assembly' and namespace-uri()='Assembly']
/*[local-name()='Parts' and namespace-uri()='Assembly']
/*[local-name()='Part' and namespace-uri()='Assembly']
/*[local-name()='PartName' and namespace-uri()='Assembly']
这个更短,但更不“安全”,因为它只与元素名称匹配,并且不使用名称空间作为标准。
/*[local-name()='Assembly']
/*[local-name()='Parts']
/*[local-name()='Part']
/*[local-name()='PartName']
它们长而丑,但会起作用。
答案 1 :(得分:1)
//装配/零件/部件/零件名称
答案 2 :(得分:1)
我发现我必须在使用XPath的C#程序中设置命名空间管理器:
XmlNamespaceManager nsMgr = new XmlNamespaceManager(Document.NameTable);
nsMgr.AddNamespace("sc", "Assembly");
并且XPath是//sc:Parts/sc:Part/sc:PartName