Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当元素名称中有冒号时,如何使用LINQ查询XDocument?_Linq_Linq To Xml - Fatal编程技术网

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

当元素名称中有冒号时,如何使用LINQ查询XDocument?,linq,linq-to-xml,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:h

我试图在一个包含XDocument对象的应用程序中使用LINQ to XML。在下面的示例中,如何查询结果元素

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

冒号表示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;
静态XName服务(字符串名称)
{
返回XNamespace.Get(“”+name;
}
XDocument doc=XDocument.Parse(xml);
字符串值=doc.substands(serv(“header”).First().substands(serv(“response”)).First().substands(serv(“result”)).First().value;

serv
在XML中是名称空间前缀。它必须与标识名称空间的某个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;

顺便说一下,您应该考虑使用<代码> .Engult>(代码)>而不是<代码> .Lead EnthSt.(FixSt.)/<代码> .< /P>我能够使用<代码> doc.root(GetNamespaceOfPrefix)(“Serv”)<代码>修剪我的实现中的FAT,我能够在我的目标方法中创建一个更简单的变量:<代码> XNAMESPACE XD= @http://...";

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