如何解析此文本并构建对象

本文关键字:构建 对象 文本 何解析 | 更新日期: 2023-09-27 18:12:58

我从第三方应用程序获取数据,看起来像这样:

Customer Name = Cust1.xml
    <NAME>/Mark</NAME>
    <TYPE>Type 1</TYPE>
    <ADDRESS>Some Address</ADDRESS>
    <CITY>Some City</VIRTHOSTNM>
    <ZIP>11111</ZIP>
Junction Name = Cust2.xml
    <NAME>/Robert</NAME>
    <TYPE>Type 2</TYPE>
    <ADDRESS>Address 1</ADDRESS>
    <ADDRESS>Address 2</ADDRESS>
    <CITY>City For Address 1</CITY>
    <CITY>City For Address 2</CITY>
    <ZIP>Zip For City 1/ZIP>
    <ZIP>ZIP For City 2</ZIP>

可以有multiple nodesAddress, City and ZipFirst City and ZIP Nodes belong to the first Address and second to the second one

这是我到目前为止所做的:

string filePath = @"C:'SomeData.txt";
var data = File.ReadAllText(filePath);
string[] customers = data.Split(new[] { "Customer Name = " }, StringSplitOptions.RemoveEmptyEntries);

这给了我一个2个字符串的数组。

但是我很难尝试循环并找出我如何以正确的顺序将地址城市和Zip关联为Cust2等数据。

如何解析此文本并构建对象

如果我正确理解了你的问题,你可以尝试这样做。注意,我添加了一个根节点。即使你的文档在你读进去的时候没有这个,你也可以在前面和后面附加,然后这样做:

private void ParseXML()
{           
    string xml = "<root><NAME>Robert</NAME> <TYPE>Type 2</TYPE><ADDRESS>Address 1</ADDRESS><ADDRESS>Address 2</ADDRESS><CITY>City For Address 1</CITY><CITY>City For Address 2</CITY><ZIP>Zip For City 1</ZIP><ZIP>ZIP For City 2</ZIP></root>";
    var xDoc = XDocument.Parse(xml);
    int count = xDoc.Descendants("ADDRESS").Count();
    var addressDict = new Dictionary<XElement, Dictionary<XElement, XElement>>();
    int skipIndex = 0;
    for (int takeIndex = 1; takeIndex <= count; takeIndex++)
    {
        var cityAndZIPDict = new Dictionary<XElement,XElement>();
        cityAndZIPDict.Add(xDoc.Descendants("CITY").Skip(skipIndex).Take(takeIndex).First(),xDoc.Descendants("ZIP").Skip(skipIndex).Take(takeIndex).First() );
        addressDict.Add(xDoc.Descendants("ADDRESS").Skip(skipIndex).Take(takeIndex).First(), cityAndZIPDict);
        skipIndex++;
    }
}