【问题标题】:LINQ to XML: How to get element value in C#?LINQ to XML:如何在 C# 中获取元素值?
【发布时间】:2020-10-23 12:59:44
【问题描述】:

我有这个 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>

有谁知道我如何从元素“item”中获取所有值?

结果应该是:

确认打印日期 客户优惠 客户参考

提前谢谢你。

【问题讨论】:

  • 这是一个 SOAP 响应。 .Net 内置了 SOAP 端点
  • 这能回答你的问题吗? consume SOAP web service
  • 否,因为我需要有命令来获取这些值。

标签: c# xml linq soap


【解决方案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 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; }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多