简体   繁体   English

c#-在xmlDocument中选择节点

[英]c# - Select node in xmlDocument

I have an XML with this structure: 我有一个具有以下结构的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>

With this code I have obtained the ns2:VehicleIdentNumber value: 通过此代码,我获得了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"];
        }

but how can I get ns2:OriginalEquipmentValueGross value and ns2:Description value? 但是如何获取ns2:OriginalEquipmentValueGross值和ns2:Description值?

Using Xml Linq : 使用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();
        }
    }

}

It should be more or less the same of what you already have: 它应该与您已经拥有的大致相同:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM