Xdocument - 使用Prefix读取属性的值

时间:2014-08-29 09:59:37

标签: c# linq linq-to-xml

很容易找到Xdocument属性的值,但我们如何找到带有prefix / Namespace的属性。

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 

根本不起作用。

2 个答案:

答案 0 :(得分:5)

鉴于您在XML中的某处声明了名称空间前缀:

xmlns:xlink="dummy.url"

您可以使用指向上述命名空间URI的XNamespace变量来访问命名空间中的属性:

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")

答案 1 :(得分: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>

&#34;功能&#34;相当于:

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