[英]XML Return parent node when searching children
我有以下XML
<Log>
<Log>
<Log>
</Log>
<Log>
<Guid>16fea409-58cc-e211-9b7f-005056b00085</Guid>
</Log>
</Log>
<Log>
<Log>
</Log>
<Log>
<Guid>16fea409-58cc-e211-9b7f-005056b00086</Guid>
</Log>
</Log>
<Log>
<Log>
</Log>
<Log>
<Guid>16fea409-58cc-e211-9b7f-005056b00087</Guid>
</Log>
</Log>
</Log>
我想在搜索Guid时返回第二个元素Log和下面的内容,例如
<Log>
<Log>
</Log>
<Log>
<Guid>16fea409-58cc-e211-9b7f-005056b00085</Guid>
</Log>
</Log>
我已经尝试过使用linq到xml的各种方法,但似乎无法正确处理,有人可以帮忙吗?
XElement Log = XElement.Parse(responseXml)
.Elements("Log")
.Where(x => x.Element("Guid").Value == "16fea409-58cc-e211-9b7f-005056b00085")
.FirstOrDefault();
您可以使用Linq和XPath(添加对System.Xml.XPath
命名空间的引用)来执行此操作:
var guid = "16fea409-58cc-e211-9b7f-005056b00086";
var log = xdoc.XPathSelectElements("//Log[Log/Guid]")
.Where(g => (string)g.XPathSelectElement("Log/Guid") == guid)
.FirstOrDefault();
表达式//Log[Log/Guid]
选择所有Log
元素,这些元素至少具有一个带有内部Guid
元素的Log
子元素。 上面的代码返回:
<Log>
<Log></Log>
<Log>
<Guid>16fea409-58cc-e211-9b7f-005056b00086</Guid>
</Log>
</Log>
或使用简单的Linq。 您可以使用Parent属性。 但是在这种情况下,您需要确保所有Guid
元素仅嵌套在至少两个Log
元素内
var guid = "16fea409-58cc-e211-9b7f-005056b00086";
var log = xdoc.Descendants("Guid")
.Where(g => (string) g == guid)
.Select(g => g.Parent.Parent)
.FirstOrDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.