C# - 选择xmlDocument中的节点

4

我有一个如下结构的XML文档:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:Dossiers xmlns:ns2="http://www.dat.de/vxs" source="SD3" type="completeEvaluation">
    <ns2:Dossier>
         <ns2:Vehicle>
              <ns2:VehicleIdentNumber>aaaaaaaaaa</ns2:VehicleIdentNumber>
              <ns2:Equipment>
                  <ns2:OriginalEquipmentValueGross origin="dat">16206.00</ns2:OriginalEquipmentValueGross>                
                  <ns2:SeriesEquipment>
                      <ns2:EquipmentPosition>
                          <ns2:DatEquipmentId>15201</ns2:DatEquipmentId>
                          <ns2:Description>lorem ipsum</ns2:Description>                              
                      </ns2:EquipmentPosition>
                      <ns2:EquipmentPosition>
                          <ns2:DatEquipmentId>17602</ns2:DatEquipmentId>
                          <ns2:Description>lorem ipsum</ns2:Description>
                      </ns2:EquipmentPosition>
                      ...                    
                  </ns2:SeriesEquipment>
          </ns2:Vehicle>
          <ns2:Vehicle>
           ....
          </ns2:Vehicle>
    </ns2:Dossier>
</ns2:Dossiers>

使用这段代码,我已经获取到了ns2:VehicleIdentNumber的值:

        XmlDocument xml = new XmlDocument();
        xml.LoadXml(xmlFileContent);

        var xmlNodeList = xml.GetElementsByTagName("ns2:Vehicle");

        foreach (XmlElement xmlElement in xmlNodeList)
        {
            var telaio = xmlElement["ns2:VehicleIdentNumber"];
        }

但是,我该如何获取 ns2:OriginalEquipmentValueGross 值和 ns2:Description 值呢?


1
出于兴趣,你是否必须使用XmlDocument而不是XDocument(LINQ to XML)?根据我的经验,后者通常更容易使用。 - Jon Skeet
这个答案可以帮助你。在XML中选择节点 - Renan Barbosa
类似这样:xmlElement.SelectSingleNode("ns2:Equipment/ns2:OriginalEquipmentValueGross") 和 xmlElement.SelectNodes("ns2:Equipment/ns2:SeriesEquipment/ns2:EquipmentPosition/ns2:Description")。 - Alexander Powolozki
2个回答

1
使用 Xml Linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XElement root = doc.Root;
            XNamespace ns2 = root.GetNamespaceOfPrefix("ns2");

            var results = doc.Descendants(ns2 + "Vehicle").Select(x => new
            {
                vehicleIdentNumber = (string)x.Element(ns2 + "VehicleIdentNumber"),
                originalEquipmentValueGross = (string)x.Descendants(ns2 + "OriginalEquipmentValueGross").FirstOrDefault()
            }).ToList();
        }
    }

}

0

它应该与您已经拥有的大致相同:

var xmlNodeList = xml.GetElementsByTagName("ns2:Vehicle");

foreach (XmlElement xmlElement in xmlNodeList)
{
    var telaio = xmlElement["ns2:VehicleIdentNumber"];

    var equipment = xmlElement["ns2:Equipment"];
    var originalEquipmentValueGross = equipment["ns2:OriginalEquipmentValueGross"].InnerText;

    foreach (XmlElement equipmentPosition in equipment["ns2:SeriesEquipment"].GetElementsByTagName("ns2:EquipmentPosition"))
    {
        var description = equipmentPosition["ns2:Description"].InnerText;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接