C# Linq to XML 元素
C# Linq to XML Element
正在解决一个问题,我似乎无法遍历元素并将日期值从 xml 转换为日期时间,然后打印出日期大于 [=17= 的所有元素] 到控制台的日期。 XML 文件相当大,但这里有一个示例。
<DataSet>
<diffgr:diffgram xmls="">
<NewDataSet>
<USER_LOGIN>
<USER_LOGIN_ID>123</USER_LOGIN_ID>
<DATE>2017-03-01T16:56:16.59-06:00</<DATE>
</USER_LOGIN>
<CONTENT>
<CONTENT_ID>123</CONTENT_ID>
<DATE>2017-03-01T16:56:16.59-06:00</<DATE>
</CONTENT>
ETC. ETC.
<NewDataSet>
</diffgr:diffgram>
<DataSet>
在我的代码中,我有一个列表,我想通读它并输出其中日期大于 'some hardcoded date' 的所有元素。我意识到我可以为 的后代中的每个元素设置一个 foreach 循环,但我希望它是动态的,因为与我的示例相比,它必须循环的元素要多得多。这是我当前的代码。这失败并在我的代码中的 where 子句上显示 Null 异常。如果我删除 where 子句,它会打印 .
XDocument doc= XDocument.Load("xmlfile.xml");
DateTime testDate= new DateTime(2017, 03, 01);
IEnumerable<XElement> textSeg=
from element in doc.Descendants("NewDataSet")
where (DateTime)element.Element("DATE")>testDate
select element;
foreach (XElement element in textSeg)
{Console.Writeline(element);}
您正试图直接从 USER_LOGIN 元素和 CONTENT 元素中获取 DATE 元素;你需要访问他们的子元素。
(请原谅我使用method syntax over query syntax,这是我比较喜欢的)
var dateElements = doc.Descendants("NewDataSet")
// gather all the child-elements of all NewDataSet elements
.SelectMany(dataSetEle => dataSetEle.Elements())
// filter out child-elements that themselves have no applicable DATE child-elements
.Where(childEle => childEle.Elements()
.Any(grandChildEle =>
grandChildEle.Name == "DATE" && (DateTime) grandChildEle > testDate)
);
正在解决一个问题,我似乎无法遍历元素并将日期值从 xml 转换为日期时间,然后打印出日期大于 [=17= 的所有元素] 到控制台的日期。 XML 文件相当大,但这里有一个示例。
<DataSet>
<diffgr:diffgram xmls="">
<NewDataSet>
<USER_LOGIN>
<USER_LOGIN_ID>123</USER_LOGIN_ID>
<DATE>2017-03-01T16:56:16.59-06:00</<DATE>
</USER_LOGIN>
<CONTENT>
<CONTENT_ID>123</CONTENT_ID>
<DATE>2017-03-01T16:56:16.59-06:00</<DATE>
</CONTENT>
ETC. ETC.
<NewDataSet>
</diffgr:diffgram>
<DataSet>
在我的代码中,我有一个列表,我想通读它并输出其中日期大于 'some hardcoded date' 的所有元素。我意识到我可以为 的后代中的每个元素设置一个 foreach 循环,但我希望它是动态的,因为与我的示例相比,它必须循环的元素要多得多。这是我当前的代码。这失败并在我的代码中的 where 子句上显示 Null 异常。如果我删除 where 子句,它会打印 .
XDocument doc= XDocument.Load("xmlfile.xml");
DateTime testDate= new DateTime(2017, 03, 01);
IEnumerable<XElement> textSeg=
from element in doc.Descendants("NewDataSet")
where (DateTime)element.Element("DATE")>testDate
select element;
foreach (XElement element in textSeg)
{Console.Writeline(element);}
您正试图直接从 USER_LOGIN 元素和 CONTENT 元素中获取 DATE 元素;你需要访问他们的子元素。
(请原谅我使用method syntax over query syntax,这是我比较喜欢的)
var dateElements = doc.Descendants("NewDataSet")
// gather all the child-elements of all NewDataSet elements
.SelectMany(dataSetEle => dataSetEle.Elements())
// filter out child-elements that themselves have no applicable DATE child-elements
.Where(childEle => childEle.Elements()
.Any(grandChildEle =>
grandChildEle.Name == "DATE" && (DateTime) grandChildEle > testDate)
);