用C#像Python的lxml一样读取XML文件?
<Connections>
<Connection ID = "1" Source="1:0" Sink="4:0"/>
<Connection ID = "2" Source="2:0" Sink="4:1"/>
<Connection ID = "3" Source="2:0" Sink="5:0"/>
<Connection ID = "4" Source="3:0" Sink="5:1"/>
<Connection ID = "5" Source="4:0" Sink="6:0"/>
<Connection ID = "6" Source="5:0" Sink="7:0"/>
</Connections>
当我需要从之前的XML代码中获取信息时,可以使用Python的lxml库,方法如下。
def getNodeList(self):
connection = self.doc.find('Connections')
cons = connection.find('Connection')
for con in cons.iter():
con.get("ID") # get attribute
...
- 我可以用什么C#库或函数来获取像Python的lxml那样的信息?我的意思是,我能否在C#中使用find()/iter()或类似的功能?
- 有哪些C#库类似于Python的lxml?
补充说明
根据dtb的回答,我找到了我需要的东西。
using System;
using System.Xml;
using System.Xml.Linq;
namespace HIR {
class Dummy {
static void Main(String[] argv) {
XDocument doc = XDocument.Load("test2.xml");
var connection = doc.Descendants("Connections"); // .First();
var cons = connection.Elements("Connection");
foreach (var con in cons)
{
var id = (string)con.Attribute("ID");
Console.WriteLine(id);
}
}
}
}
我必须去掉'First()'以避免编译错误。使用mono我可以运行以下代码来获取二进制文件。
dmcs /r:System.Xml.Linq main.cs
2 个回答
0
我会使用 XElement
:
var xml = XElement.Parse(xmlString);
foreach (var connection in xml.Elements("Connection"))
{
Console.WriteLine(connection.Attribute("ID").Value);
}
5
你想使用 LINQ-to-XML:
void GetNodeList()
{
var connection = this.doc.Descendants("Connections").First();
var cons = connection.Elements("Connection");
foreach (var con in cons)
{
var id = (string)con.Attribute("ID");
}
}