很容易找到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
根本不起作用。
答案 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>