linq - 当元素名称中带有冒号时,如何使用LINQ查询XDocument?

标签 linq linq-to-xml

我试图在XDocument对象中使用LINQ to XML。您如何在以下示例中查询结果元素?

<serv:header>
   <serv:response>
      <serv:result>SUCCESS</serv:result>
      <serv:gsbStatus>PRIMARY</serv:gsbStatus>
   </serv:response>
</serv:header>

当我使用这样的语句时,会出现异常“其他信息:名称中不能包含十六进制值0x3A的':'字符”。
XDocument doc = XDocument.Parse(xml);
string value = doc.Descendants("serv:header").First().Descendants("serv:response").First().Descendants("serv:result").First().Value;

最佳答案

XML中的serv是 namespace 前缀。它必须与标识 namespace 的URI关联。在您的XML中寻找这样的属性:

xmlns:serv="..."

引号内的值将是 namespace 。现在,在您的C#代码中,使用该URI创建一个XNamespace对象:
private static readonly XNamespace serv = "...";

然后可以在如下查询中使用它:
string value = doc
    .Descendants(serv + "header").First()
    .Descendants(serv + "response").First()
    .Descendants(serv + "result").First()
    .Value;

顺便说一句,您应该考虑使用.Element()而不是.Descendants().First()

关于linq - 当元素名称中带有冒号时,如何使用LINQ查询XDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640108/

相关文章:

c# - Entity Framework : Mapping existing one-to-many relationship to Model

c# - LINQ to Entities OrderBy 表达式树

c# - 如何使用 linq 查询获取层次数据的深度?

c# - 在 C# 中为 jQuery 创建 XML

c# - 检查 Linq-to-xml 中结果是否存在

c# - 将 LINQ 转换为 XML

c# - 使用 LINQ 更新字符串数组

database - 尝试在 Linq 中执行子查询...遇到问题!

c# - 如何在 C# 中使用 lambda 表达式检测元素是否存在?

c# - 限制查询以忽略元素后代