当元素名称中包含冒号时,如何使用 LINQ 查询 XDocument?

发布于 2024-08-09 04:10:21 字数 542 浏览 4 评论 0原文

我正在尝试在 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;

I am trying to use LINQ to XML in an with the XDocument object. How do you query the result element in the example below?

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

When I use a statement like this, I get the exception 'Additional information: The ':' character, hexadecimal value 0x3A, cannot be included in a name.'

XDocument doc = XDocument.Parse(xml);
string value = doc.Descendants("serv:header").First().Descendants("serv:response").First().Descendants("serv:result").First().Value;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千紇 2024-08-16 04:10:21

XML 中的 serv命名空间前缀。它必须与某个标识命名空间的 URI 相关联。在 XML 中查找类似这样的属性:

xmlns:serv="..."

引号内的值将是命名空间。现在,在您的 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()

serv in your XML is a namespace prefix. It has to be associated with some URI, that identifies the namespace. Look for an attribute like this in your XML:

xmlns:serv="..."

The value inside the quotes will be the namespace. Now, in your C# code, you use that URI to create an XNamespace object:

private static readonly XNamespace serv = "...";

And then you can use that in queries like this:

string value = doc
    .Descendants(serv + "header").First()
    .Descendants(serv + "response").First()
    .Descendants(serv + "result").First()
    .Value;

By the way, you should consider using .Element() rather than .Descendants().First().

百合的盛世恋 2024-08-16 04:10:21

该冒号表示 XML 正在使用 命名空间。基于这篇博客文章某人发布了有关 LINQ、XML 和命名空间的文章,这里是您可能想要尝试的代码版本:

static XName serv(string name)
{
  return XNamespace.Get("<THE_NAMESPACE_URL>") + name;
}

XDocument doc = XDocument.Parse(xml);
string value = doc.Descendants(serv("header")).First().Descendants(serv("response")).First().Descendants(serv("result")).First().Value;

That colon means that the XML is using namespaces. Based on this blogpost someone posted about LINQ, XML, and namespaces, here's a version of your code that you might want to try.:

static XName serv(string name)
{
  return XNamespace.Get("<THE_NAMESPACE_URL>") + name;
}

XDocument doc = XDocument.Parse(xml);
string value = doc.Descendants(serv("header")).First().Descendants(serv("response")).First().Descendants(serv("result")).First().Value;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文