如何解析此文本并构建对象
本文关键字:构建 对象 文本 何解析 | 更新日期: 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 nodes
和Address, City and Zip
。First 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++;
}
}