使用时在XML文件中包含冒号时获取属性

时间:2016-06-09 05:19:07

标签: c# xml

我遇到了一个问题,当冒号存在时,我无法在xml中获取该属性。例如,我想获取值,但似乎无法使用我的代码。有什么建议吗?

例如:

Xml content:
<ext-link xlink:href="http://www.ncbi.nlm.nih.gov/books/NBK154461/" ext-link-type="uri" xmlns:xlink="http://www.w3.org/1999/xlink">http://www.ncbi.nlm.nih.gov/books/NBK154461/</ext-link>


My code:
foreach(XElement xeTmp in Elementlist)
{
string strValue = xeTmp.Attribute("xlink:href").Value;
}

例外:

 {"The ':' character, hexadecimal value 0x3A, cannot be included in a
 name."}

请建议如何修复.....

1 个答案:

答案 0 :(得分:6)

首先,xlink:前缀是属性的namespace prefix。名称空间前缀没有内在含义,它只是查找对应于前缀的名称空间,在该作用域中xmlns:xlink="..."属性必须为declared,在这种情况下:

xmlns:xlink="http://www.w3.org/1999/xlink"

其次,XElement.Attribute(XName)方法实际上采用XName参数。此类表示XML名称空间和名称的组合,因此允许您使用XName.Get()指定要搜索的属性名称空间和名称:

var strValue = (string)xeTmp.Attribute(XName.Get("href", "http://www.w3.org/1999/xlink"));

或等效使用implicit operators

var strValue = (string)xeTmp.Attribute(((XNamespace)"http://www.w3.org/1999/xlink") + "href");

要遍历元素的所有属性,您可以使用XElement.Attributes()