风格问题:在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是否更干净。
使用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()