当元素名称中有冒号时,如何使用LINQ查询XDocument?
我试图在一个包含XDocument对象的应用程序中使用LINQ to XML。在下面的示例中,如何查询结果元素当元素名称中有冒号时,如何使用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
<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;