C# 如何提取XML文件中每次出现的标记
我有以下XML文件:C# 如何提取XML文件中每次出现的标记,c#,xml,linq,C#,Xml,Linq,我有以下XML文件: <queryResponse xmlns=""> <querySubjectResponse xmlns=""> ... <report> <informationReported> <aar> <narrative>THIS IS A TEST NARRATIVE&l
<queryResponse xmlns="">
<querySubjectResponse xmlns="">
...
<report>
<informationReported>
<aar>
<narrative>THIS IS A TEST NARRATIVE</narrative>
</aar>
</informationReported>
...
<statement>
<subjectStatement>
<statement>THIS IS A TEST STATEMENT</statement>
</subjectStatement>
</statement>
...
</report>
...
<report>
<informationReported>
<aar>
<narrative>THIS IS A TEST NARRATIVE2</narrative>
</aar>
</informationReported>
...
<statement>
<subjectStatement>
<statement>THIS IS A TEST STATEMENT2</statement>
</subjectStatement>
</statement>
...
</report>
...
<report>
<informationReported>
<aar>
<narrative>THIS IS A TEST NARRATIVE3</narrative>
</aar>
</informationReported>
...
<statement>
<subjectStatement>
<statement>THIS IS A TEST STATEMENT3</statement>
</subjectStatement>
</statement>
...
</report>
...
</querySubjectResponse>
</queryResponse>
我如何做到这一点
我正在使用XDocument
加载文件:
XDocument X = XDocument.Load("myfile.xml");
var main = x.Element("queryResponse").Element("querySubjectResponse").Element("report").Element("informationReported").Element("aar");
我正试图从这个链接中找到答案:假设每个报告都有叙述和可选语句,这应该对您有用:
XElement root = XElement.Load(file);
List<string> list = root.Descendants("report")
.SelectMany(report =>
{
List<string> sub = new List<string>();
sub.Add(report.Descendants("narrative").First().Value);
string statement = (string)report.Descendants("statement")
.FirstOrDefault(s => s.Elements().Any() == false);
sub.Add(statement ?? "NULL");
return sub;
})
.ToList();
“我想保存叙述,对于每个叙述,将语句保存到一个数组中以供以后使用。”
不包含
。您的意思是要将
保存在包含
的
中吗?还有嵌套的
s,是否要在最里面的一个?问题不清楚,你也没有表现出任何企图,除此之外,您可以将其作为XDocument
加载,我用我想保存的内容更新了我的问题,并且我能够获取元素并将其保存到var
中,但不太确定以后如何继续。对于第二个或第一个选项,是否可以将叙述和陈述包含在不同的列表中?另外,对于此代码:sub.Add(report.substands(“statement”).Where(statement=>statement.Elements().Any()==false).First().Value)代码>我得到的序列不包含任何元素
错误。@SiKni8则不是每个报表都包含语句。缺少第三个语句
节点。如果缺少空值,我是否可以输入空值,并且仍然可以使其工作?还要记住,父语句中有一个子语句。我希望child语句
@SiKni8删除第一个代码,这样我就不必重复工作了。
XElement root = XElement.Load(file);
List<string> list = root.Descendants("report")
.SelectMany(report =>
{
List<string> sub = new List<string>();
sub.Add(report.Descendants("narrative").First().Value);
string statement = (string)report.Descendants("statement")
.FirstOrDefault(s => s.Elements().Any() == false);
sub.Add(statement ?? "NULL");
return sub;
})
.ToList();
var list = root.Descendants("report")
.Select(report => new
{
Narrative = report.Descendants("narrative").First().Value,
Statement = ((string)report.Descendants("statement")
.FirstOrDefault(s => s.Elements().Any() == false))
?? "NULL"
})
.ToList();