2015-06-29 14 views
0

考慮下面的XML:使用System.Xml.XmlDocument.SelectNodes與命名空間訪問子節點的語法是什麼?

<?xml version="1.0" encoding="UTF-8"?> 
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> 
    <RegistrationInfo> 
    <Date>2014-12-03T13:58:05.5136628</Date> 
    <Author>ABCCORP\jsmith</Author> 
    </RegistrationInfo> 
</Task> 

我可以使用的SelectNodes按如下方式訪問任務節點:

[xml]$xml = gc C:\temp\myxml.xml 
$ns = new-object Xml.XmlNamespaceManager $xml.NameTable 
$ns.AddNamespace("ns0", "http://schemas.microsoft.com/windows/2004/02/mit/task") 
$xml.SelectNodes("ns0:Task", $ns) 

但我不能訪問子節點。例如,返回空值:

$xml.SelectNodes("ns0:Task/RegistrationInfo", $ns) 

訪問子節點的正確語法是什麼?

+1

'$ xml.SelectNodes(「NS0:任務/ NS0:RegistrationInfo 「,$ ns)' – PetSerAl

回答

1

你有前綴的名稱空間聲明,這也被稱爲默認命名空間,在這裏:

<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> 

注意,如果默認命名空間中聲明不是唯一因素是該命名空間,但所有的子元素繼承祖先的默認命名空間隱含的,除非另有規定(使用顯式名稱空間前綴或本地默認命名空間指向不同的命名空間uri)。這意味着,在這種情況下,包括RegistrationInfo所有元素都在默認名稱空間,這就是爲什麼@PetSerAl建議使用ns0前綴RegistrationInfo還有:

$xml.SelectNodes("ns0:Task/ns0:RegistrationInfo", $ns) 
相關問題