命名空间问题 - 所有返回null的XPath查询

时间:2016-10-04 20:06:44

标签: xml powershell xpath

我有一个使用命名空间的XML文档$books,我尝试使用$ns = New-Object System.Xml.XmlNamespaceManager($books.NameTable)之类的东西创建XML命名空间管理器。虽然我不太清楚我之后做错了什么。我正在尝试使用SelectSingleNode()在XML文档中搜索我需要的特定节点,但我的所有XPath查询都返回null。

这里有一些xml文档:

<ernm:NewReleaseMessage xmlns:ernm="http://ddex.net/xml/ern/341" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" LanguageAndScriptCode="en" MessageSchemaVersionId="/ern/341" xs:schemaLocation="http://ddex.net/xml/ern/341 http://ddex.net/xml/ern/341/release-notification.xsd">
    <MessageHeader>
        <MessageId>123123</MessageId>
        <MessageRecipient>
            <PartyId>567567</PartyId>
                <PartyName>
                    <FullName>John Smith</FullName>
                </PartyName>
        </MessageRecipient>
    </MessageHeader>
</ernm:NewReleaseMessage>

此外,这是我到目前为止尝试使SelectSingleNode()正常工作的一些内容:

[xml]$books = Get-Content xmlpath.xml
$ns = New-Object System.Xml.XmlNamespaceManager($books.NameTable)
$ns.AddNamespace("ns", $books.DocumentElement.NamespaceURI)

$books.SelectSingleNode("//newreleasemessage", $ns) #returns null
$books.SelectSingleNode("//ns:newreleasemessage", $ns) #returns null
$books.SelectSingleNode("//ernm:newreleasemessage", $ns) #returns null
$books.SelectSingleNode("//xmlns:newreleasemessage", $ns) #returns null
$books.SelectSingleNode("//xml:newreleasemessage", $ns) #returns null

我还尝试了除newreleasemessage以外的其他节点,但它仍然是空白的,我只是想提供一些我尝试过的例子。在这里使用命名空间的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

XPath查询区分大小写。这有效:

$books.SelectSingleNode("//ns:NewReleaseMessage", $ns)