我有一个使用命名空间的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
以外的其他节点,但它仍然是空白的,我只是想提供一些我尝试过的例子。在这里使用命名空间的正确方法是什么?
答案 0 :(得分:2)
XPath查询区分大小写。这有效:
$books.SelectSingleNode("//ns:NewReleaseMessage", $ns)