Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何提取XML文件中每次出现的标记_C#_Xml_Linq - Fatal编程技术网

C# 如何提取XML文件中每次出现的标记

C# 如何提取XML文件中每次出现的标记,c#,xml,linq,C#,Xml,Linq,我有以下XML文件: <queryResponse xmlns=""> <querySubjectResponse xmlns=""> ... <report> <informationReported> <aar> <narrative>THIS IS A TEST NARRATIVE&l

我有以下XML文件:

<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();