2016-10-04 42 views
0

我有一個使用名稱空間的XML文檔$books,並且我嘗試使用類似$ns = New-Object System.Xml.XmlNamespaceManager($books.NameTable)的東西來創建XML名稱空間管理器。儘管如此,我不確定自己做錯了什麼。我試圖用SelectSingleNode()來搜索我需要的特定節點的XML文檔,但是我所有的XPath查詢都返回null。命名空間問題 - 所有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,它仍然回到空白,我只是想提供一些我嘗試過的例子。在這裏使用命名空間的正確方法是什麼?

回答

2

XPath查詢區分大小寫。這個作品:

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

甜心主我覺得很蠢。謝謝,讓你滿意。爲什麼沒有在每一個xpath簡介的頂部貼上!? –

+0

因爲對於那些花了近幾年的時間寫出不區分大小寫的語言的人來說,這只是一個問題,而他們是少數。 –