c# - 在 C# 中解析 XML 文件

标签 c# xml linq xpath xmlreader

我有一个 XML 文件,由用 C++ 编写的库生成:

<?xml version="1.0" encoding="UTF-8" ?>
<main>
    <days>
        <day>
            <date>27.06.2014</date>
            <p/>
        </day>
        <day>
            <date>28.06.2014</date>
            <p>
                <short>short value</short>
                <name>name value</name>
                <type>type value</type>
                <aud>aud value</aud>
                <tr>tr value</tr>
                <added>added value</added>
            </p>
            <p>
                <short>short value</short>
                <name>name value</name>
                <type>type value</type>
                <aud>aud value</aud>
                <tr>tr value</tr>
                <added>added value</added>
            </p>
        </day>
    ...
    </days>
    <di>
        <did>
            <dayname>Пн</dayname>
            <sw>1</sw>
            <st>8:00-9:35</st>
        </did>              
        <did>
            <dayname>Вт</dayname>
            <sw>2</sw>
            <st>9:45-11:20</st>
        </did>  
    ...
    </di>
</main>

我读取这些 xml 文件如下:

XmlTextReader r = new XmlTextReader("out.xml");
while (r.Read())
{
    if (r.Name == "date") { r.Read(); dates[c1] = (r.Value); c1++; }
    else if (r.Name == "short") { r.Read(); shorts[c2] = (r.Value); c2++;  }
    else if (r.Name == "name") { r.Read(); names[c3] = (r.Value); c3++;  }
    else if (r.Name == "type") { r.Read(); types[c4] = (r.Value); c4++; }
    else if (r.Name == "aud") { r.Read(); auds[c5] = (r.Value); c5++; }
    else if (r.Name == "tr") { r.Read(); trs[c6] = (r.Value); c6++; }
    else if (r.Name == "sw") { r.Read(); ws[c7] = (r.Value); c7++; }
    else if (r.Name == "st") { r.Read(); st[c8] = (r.Value); c8++; }
}
r.Close();

我如何解析文件,以便我可以理解哪一天属于哪个参数,尤其是一天中有多个参数(在本例中为“p”)?在网上找了解决办法,很多人说用“LINQ to XML”或者“XPath”比较好,但是没有人说如何维护对象依赖。

最佳答案

使用 XDocument 类加载您的 xml,然后您可以使用 Descendants 或 Element 方法遍历它。

var xml = XDocument.Load("your xml string");
foreach (var day in xml.Descendants("day"))
{
    var pChildren = day.Descendants("p").ToList();
    var aretThereMorePs = pChildren.Count() > 1;
    foreach (var p in pChildren)
    {
        var shortVal = (string)p.Element("short");
        //etc
    }
}

关于c# - 在 C# 中解析 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456903/

相关文章:

c# linq 按日期时间分组到最接近的秒

c# - 当它作为字符串出现时,保护完整的 where 语句

c# - .netcore 2.2 Httpcontext 没有 SignInAsync

c# - Cassandra:参数类型不匹配

C# Linq 如何选择数据表中多列的不同行数

javascript - innerHTML 用于查看 div 中的 XML 内容

c# - Asp.net 中的全局计时器

c# - "Syntax error at position 20 in Timestamp"Azure表存储查询问题

android - TextView 阻止单击 ListView

javascript - 使用c#创建合法的javascript文件