简体   繁体   English

LINQ to XML:如何在 C# 中获取元素值?

[英]LINQ to XML: How to get element value in C#?

I have this XML structure:我有这个 XML 结构:

<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope">
  <SOAP-ENV:Header>
    <dlv:delivery xmlns:dlv="http://schemas.biztalk.org/btf-2-0/delivery">
      <dlv:message>
        <dlv:messageID>SDID20200921053955</dlv:messageID>
        <dlv:sent>2020-09-21T05:39:55</dlv:sent>
      </dlv:message>
      <dlv:to>
        <dlv:address>urn:schindler:SchindlerDraw:prod</dlv:address>
      </dlv:to>
      <dlv:from>
        <dlv:address>urn:schindler:logical-system:CRM</dlv:address>
      </dlv:from>
      <dlv:from>
        <dlv:system>PC1</dlv:system>
      </dlv:from>
    </dlv:delivery>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
      <asx:values>
        <SALESORDER>
          <EXTENSIONIN>
            <item>
              <CONFIRMATIONPRINTDATE />
              <CUSTOMEROFFERNOTE />
              <CUSTOMERREFERENCE />
           </item>
          </EXTENSIONIN>
        </SALESORDER>
      </asx:values>
    </asx:abap>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Does anyone know how I can get all the values from the element "item"?有谁知道如何从元素“item”中获取所有值?

The result should be:结果应该是:

CONFIRMATIONPRINTDATE CUSTOMEROFFERNOT CUSTOMERREFERENCE确认打印日期客户提供非客户参考

Thank you in advance.先感谢您。

Use 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 delivery = doc.Descendants().Where(x => x.Name.LocalName == "delivery").FirstOrDefault();
            XNamespace dlv = delivery.GetNamespaceOfPrefix("dlv");
            Envelope envelope = new Envelope();

            envelope.messageId = (string)delivery.Descendants(dlv + "messageID").FirstOrDefault();
            envelope.sent = (DateTime)delivery.Descendants(dlv + "sent").FirstOrDefault();
            envelope.toAddr = (string)delivery.Descendants(dlv + "from").FirstOrDefault().Element(dlv + "address");
            envelope.fromAddr = (string)delivery.Descendants(dlv + "to").FirstOrDefault().Element(dlv + "address");
            envelope.system = (string)delivery.Descendants(dlv + "system").FirstOrDefault();

            envelope.items = doc.Descendants("item").FirstOrDefault().Elements()
                .GroupBy(x => x.Name.LocalName, y => (string)y)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());
        }
    }
    public class Envelope
    {
        public string messageId { get; set; }
        public DateTime sent { get; set; }
        public string toAddr { get; set; }
        public string fromAddr { get; set; }
        public string system { get; set; }
        public Dictionary<string,string> items { get; set; }
    }
}

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

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