分析全局节点内的多个xml节点和子节点
本文关键字:节点 xml 子节点 全局 | 更新日期: 2023-09-27 18:01:03
如何解析多个节点&一个XML文件中的子节点?这里的文件结构:
<objects>
<object id=1 name="test" param="1">
<attribute key = "test" value="1"/>
<subobjects>
<subobject id=2 value="test" param="some"/>
<subobject2 id=2 value="test" param="some"/>
<subobject3 id=2 value="test" param="some"/>
</subobjects>
</object>
<object id=2 name="newtest" param="44">
<attribute key = "test1" value="1"/>
<attribute key = "test2" value="2"/>
<attribute key = "test3" value="3"/>
<subobjects>
<subobject id=1 value="intvaluetest" param="1"/>
</subobjects>
</object>
</objects>
我试图为此制作一个阅读器解析器,他成功地读取了对象和属性键,但我不知道如何以这种格式读取node及其子节点(如xml示例(我的读者是:
XmlDocument document = new XmlDocument();
document.Load(fileName);
foreach (XmlNode node in document.GetElementsByTagName("object"))
{
ushort id = ushort.Parse(node.Attributes["id"].InnerText);
//do some things
foreach (XmlAttribute attr in node.Attributes)
{
switch (attr.Name.ToLower())
{
case "name":
//do things
break;
case "param":
//do things
break;
}
}
if (node.HasChildNodes)
{
foreach (XmlNode attrNode in node.ChildNodes)
{
if (attrNode.Attributes != null &&
attrNode.Attributes.Count > 0 &&
attrNode.Attributes["key"] != null &&
attrNode.Attributes["value"] != null)
{
string value = attrNode.Attributes["value"].InnerText;
switch (attrNode.Attributes["key"].InnerText.ToLower())
{
case "test":
//do things with value
break;
}
}
}
}
请问,在这种情况下,C#中有针对XML解析节点和子节点的解决方案吗?我认为nodeList=root.SelectNodes()
-在这方面不是更好的主意。<subobjects>
-是对象的子节点,并且这具有它们的非静态(对于每个对象-不同(类型的子对象。知道吗?
递归函数能工作吗?
static void Main() {
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
ReadNode(doc.GetElementsByTagName("object")[0]);
Console.ReadLine();
}
static void ReadNode(XmlNode node) {
//Do something with each Node
if(node.Attributes.Count > 0) {
foreach(XmlAttribute attr in node.Attributes) {
//Do Something with each Attribute
}
}
if(node.HasChildNodes == true) {
foreach(XmlNode chlnode in node.ChildNodes) {
ReadNode(chlnode);
}
}
}
您可以使用XmlNode.Name
来知道您正在处理哪个节点。