风格问题:在XML节点中读取LINQ或XPath

本文关键字:读取 LINQ XPath 节点 问题 XML 风格 | 更新日期: 2023-09-27 18:00:42

我很想知道如何以最优雅/最干净的方式阅读以下XML。(摘录)

<Config>
    <MyTag />
    <MyTag />
</Config>
<Config>
    <MyTag />
    <MyTag />
    <MyTag />
</Config>

我只想在MyTag节点中读取。我的第一个想法是LINQ,但不知道使用XPath是否更干净。

风格问题:在XML节点中读取LINQ或XPath

使用XPath:要干净得多

foreach(XElement myTag in (IEnumerable)XDocument.Load(xmlFile)
                                            .XPathEvaluate("/xml/Config/MyTag"))
{
}

LINQ等效为:

foreach(var myTag in XDocument.Load(xmlFile).Root.Elements("Config")
                              .SelectMany(x => x.Elements("MyTag")))
{
}

我的回答假设Config标记周围有一个xml标记,否则xml文件将无效。

你在问题中描述了你想要的标签,所以这可能是一个风格问题。但是,将来的查询可能会有所不同吗?也就是说,查询可能是在运行时形成的吗?我问是因为XPath可能是一种方法,因为它是一个查询字符串。LINQ可能非常灵活,但您确实需要了解更多关于XML结构和查询的信息才能构建表达式。

VB。Net拥有(imo)最优雅的方式:

Dim xml = <XML>
              <Config>
                  <MyTag>1</MyTag>
                  <MyTag>2</MyTag>
              </Config>
              <Config>
                  <MyTag>3</MyTag>
                  <MyTag>4</MyTag>
                  <MyTag>5</MyTag>
                  <MyTag>6</MyTag>
              </Config>
          </XML>
xml.Descendants("MyTag").ToList.ForEach(Sub(x)
                                            Console.WriteLine("MyTag = {0}", x.Value)
                                        End Sub)
Console.ReadLine()