简体   繁体   English

C# - 将 XML 元素转换为串联字符串中的键值对

[英]C# - Convert XML elements to key value pair in a concatenated string

I Have below XML as an input我有以下 XML 作为输入

<Details>
  <PAY>
    <Mode>xyz</Mode>
    <REMARKS>no</REMARKS>
  </PAY>
  <data>
    <Customer>
      <Participant>
        <Participant1FirstName>aaaa</Participant1FirstName>
        <Participant1LastName>zzzz</Participant1LastName>
      </Participant>
      <Participant>
        <Participant2FirstName>bbbb</Participant2FirstName>
        <Participant2LastName>yyyy</Participant2LastName>
      </Participant>
      <Participant>
        <Participant3FirstName>cccc</Participant3FirstName>
        <Participant3LastName>xxxx</Participant3LastName>
      </Participant>
    </Customer>
  </data>
</Details>

Desired output :所需的输出:

String strOutput = "|Participant1FirstName = aaaa|Participant1LastName = zzzz|; |Participant2FirstName = bbbb|Participant2LastName = yyyy|; |Participant3FirstName = cccc|Participant3LastName = xxxx|"

SO far, I have tried parsing XML string into XDocument, and thinking of using Linq to get the desired output, but don't know the way forward.到目前为止,我已经尝试将 XML 字符串解析为 XDocument,并考虑使用 Linq 来获得所需的输出,但不知道前进的方向。

Input :输入 :

string strXML = "<Details>  <PAY>    <Mode>xyz</Mode>    <REMARKS>no</REMARKS>  </PAY>  <data>    <Customer>      <Participant>        <Participant1FirstName>aaaa</Participant1FirstName>        <Participant1LastName>zzzz</Participant1LastName>      </Participant>      <Participant>        <Participant2FirstName>bbbb</Participant2FirstName>        <Participant2LastName>yyyy</Participant2LastName>      </Participant>      <Participant>        <Participant3FirstName>cccc</Participant3FirstName>        <Participant3LastName>xxxx</Participant3LastName>      </Participant>    </Customer>  </data></Details>"
            
XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(strXML);

Edit编辑

Any way I can get desired output from below XML ?有什么办法可以从 XML 下方获得所需的输出?

 <Details> 
    <PAY> 
    <Mode>xyz</Mode> 
    </PAY> 

    <data> 
    <Customer>
        <Participant>
            <Participant1> 
                <Participant1FirstName>aaaa</Participant1FirstName> 
                <Participant1LastName>zzzz</Participant1LastName> 
            </Participant1> 
            <Participant2> 
                <Participant2FirstName>bbbb</Participant2FirstName> 
                <Participant2LastName>yyyy</Participant2LastName> 
            </Participant2> 
        <Participant>
    </Customer> 
    </data> 
</Details>

You could do it like this你可以这样做

XDocument xdoc = new XDocument();
xdoc = XDocument.Parse(strXML);

var values = xdoc.Descendants("Participant").Elements()
                 .Select(x => x.Name + " = " + x.Value).ToList();

 string result = string.Join("|", values);

Try following :尝试以下:

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

            List<Particapant> participants = doc.Descendants("Participant").Select(x => new Particapant()
            {
                firstName = (string)x.Elements().FirstOrDefault(),
                lastName = (string)x.Elements().LastOrDefault()
            }).ToList();

            string output = string.Join(";", participants
                .Select(x => string.Format("|ParticipantFirstName = {0}|ParticipantLastName = {1}|", x.firstName, x.lastName)));
        }
    }
    public class Particapant
    {
        public string firstName { get; set; }
        public string lastName { get; set; }
    }
}

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

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