我遇到了一个问题,当冒号存在时,我无法在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."}
请建议如何修复.....
答案 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()
。