LINQ to XML 根据条件提取
LINQ to XML extract based on condition
我有以下重复的 XML 结构,我必须从中创建一个对象列表:
<entries>
<entry>
<start>2013-10-01T00:00:00.000+02:00</start>
<end>2013-11-01T00:00:00.000+02:00</end>
<value>27.02</value>
<isExtracted>true</isExtracted>
</entry>
<entry>
<start>2013-11-01T00:00:00.000+02:00</start>
<end>2013-12-01T00:00:00.000+02:00</end>
<value>27.02</value>
<isExtracted>true</isExtracted>
</entry>
<entry>
<start>2013-12-01T00:00:00.000+02:00</start>
<end>2014-01-01T00:00:00.000+02:00</end>
<value>27.02</value>
</entry>
</entries>
我只想提取那些具有 isExtracted xml 标记的元素!
我现在做的是:
var extract = xElemMaster.Elements("entries").Elements("entry")
.Where(elem => elem.Name.Equals("isExtracted"));
但我没有得到任何结果。可能出了什么问题?
你可以使用Any
方法
xElemMaster.Elements("entries")
.Elements("entry")
.Where(elem => elem.Elements("isExtracted").Any());
或者只是尝试获取元素并检查是否为空:
xElemMaster.Elements("entries")
.Elements("entry")
.Where(elem => elem.Element("isExtracted") != null);
为了使其更具可读性,我将创建一个扩展方法并改为使用它:
public static bool HasElement(this XElement source, string elementName)
{
return source.Element(elementName) != null;
}
xElemMaster.Elements("entries")
.Elements("entry")
.Where(elem => elem.Element.HasElement("isExtracted"));
您可以使用 Descendants
搜索节点和子节点,然后使用 Any
检查 IsExtracted 是否存在。
var extract = xElemMaster.Descendants("entry")
.Where(w=>w.Elements("isExtracted").Any())
您可能还想检查 isExtracted==True 还是 false
var extract = x.Descendants("entry")
.Where(w => w.Elements("isExtracted").Any() && w.Element("isExtracted").Value=="true");
我有以下重复的 XML 结构,我必须从中创建一个对象列表:
<entries>
<entry>
<start>2013-10-01T00:00:00.000+02:00</start>
<end>2013-11-01T00:00:00.000+02:00</end>
<value>27.02</value>
<isExtracted>true</isExtracted>
</entry>
<entry>
<start>2013-11-01T00:00:00.000+02:00</start>
<end>2013-12-01T00:00:00.000+02:00</end>
<value>27.02</value>
<isExtracted>true</isExtracted>
</entry>
<entry>
<start>2013-12-01T00:00:00.000+02:00</start>
<end>2014-01-01T00:00:00.000+02:00</end>
<value>27.02</value>
</entry>
</entries>
我只想提取那些具有 isExtracted xml 标记的元素!
我现在做的是:
var extract = xElemMaster.Elements("entries").Elements("entry")
.Where(elem => elem.Name.Equals("isExtracted"));
但我没有得到任何结果。可能出了什么问题?
你可以使用Any
方法
xElemMaster.Elements("entries")
.Elements("entry")
.Where(elem => elem.Elements("isExtracted").Any());
或者只是尝试获取元素并检查是否为空:
xElemMaster.Elements("entries")
.Elements("entry")
.Where(elem => elem.Element("isExtracted") != null);
为了使其更具可读性,我将创建一个扩展方法并改为使用它:
public static bool HasElement(this XElement source, string elementName)
{
return source.Element(elementName) != null;
}
xElemMaster.Elements("entries")
.Elements("entry")
.Where(elem => elem.Element.HasElement("isExtracted"));
您可以使用 Descendants
搜索节点和子节点,然后使用 Any
检查 IsExtracted 是否存在。
var extract = xElemMaster.Descendants("entry")
.Where(w=>w.Elements("isExtracted").Any())
您可能还想检查 isExtracted==True 还是 false
var extract = x.Descendants("entry")
.Where(w => w.Elements("isExtracted").Any() && w.Element("isExtracted").Value=="true");