2014-08-29 77 views
2

讀取屬性值很容易找出Xdocument屬性的值,但我們如何找到帶有前綴/名稱空間的屬性。Xdocument - 通過前綴

XML代碼

<label:label xlink:type="resource" xlink:label="something" xlink:lang="en" xlink:id="res_4">My value</label:label> 

我想讀屬性值的XLink:ID(其中p爲的XElement)

p => p.Attribute("xlink:id").Value 

這並不在所有的工作。

回答

3

鑑於你有命名空間前綴的聲明在XML地方:

xmlns:xlink="dummy.url" 

您可以使用XNamespace變量點到以上命名空間URI以訪問命名空間中的屬性:

XNamespace xlink = "dummy.url"; 
..... 
p => p.Attribute(xlink+"id").Value 
//or simply cast the XAttribute to string 
//to avoid exception when the attribute not found in p 
p => (string)p.Attribute(xlink+"id") 
2

使用XName類:

XName.Get("id", XLinkNamespaceName) 

隨着XLinkNamespaceName的命名空間的前綴xlink

要從前綴獲取名稱空間,可以使用:XElement.GetNamespaceOfPrefix()

p => p.Attribute(p.GetNamespaceOfPrefix("xlink") + "id").Value 

但我建議你不要在C#代碼中使用前綴,而是使用名稱空間。事實上,

<myFile xmlns:myPrefix="http://www.tempUri.org/MyNamespace"> 
    <something myPrefix:myAttribute="myValue" /> 
</myFile> 

是 「功能性」 等價於:

<myFile xmlns:dfgerge="http://www.tempUri.org/MyNamespace"> 
    <something dfgerge:myAttribute="myValue" /> 
</myFile> 
+0

'XName xVal = XName.Get(「id」,「xlink」); string val = xelem.Attribute(xVal).ToString();'這是使用它的正確方法嗎? – 2014-08-29 10:14:10

+0

@ user2564977不可以,xlink是前綴,在你的文檔中你必須有xmlns:xlink =「...」其中......是命名空間。 – 2014-08-29 10:17:22