c#-选择xmlDocument中的节点

c#-选择xmlDocument中的节点,c#,xml,C#,Xml,我有一个具有以下结构的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:Veh

我有一个具有以下结构的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>
但是如何使用Xml Linq获取
ns2:OriginalEquipmentValueGross
值和
ns2:Description
值?

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();
        }
    }

}

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

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;
    }
}

出于兴趣,您是否必须使用XmlDocument而不是XDocument(LINQ到XML)?根据我的经验,后者通常更容易使用。这个答案可以帮助你。类似于:xmlement.SelectSingleNode(“ns2:Equipment/ns2:OriginaleEquipmentValueGross”)和xmlement.SelectNodes(“ns2:Equipment/ns2:SeriesEquipment/ns2:EquipmentPosition/ns2:Description”)
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;
    }
}