【问题标题】:How to parse the this text and build an object如何解析此文本并构建一个对象
【发布时间】:2015-12-12 10:14:34
【问题描述】:

我从第三方应用程序获取数据,如下所示:

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 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 等数据。

【问题讨论】:

  • 你看过使用 XDocument 或 XmlDocument 吗?
  • 这就是我正在做的事情,因为用文本操作来做这件事是行不通的

标签: c# .net parsing .net-4.0 string-matching


【解决方案1】:

如果我正确理解您的问题,您可以尝试这样的方法。请注意,我添加了一个根节点。即使您的文档在阅读时没有此内容,您也可以追加到前面和末尾,然后执行以下操作:

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++;
    }
}

【讨论】:

  • 不错。将我的循环减半。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多