簡體   English   中英

將平面 txt 文件轉換為嵌套的 xml

[英]converting flat txt file to nested xml

我需要將帶有一些轉換列元素的文本文件轉換為嵌套的 xml 文件 -
例如
txt 平面文件 - Name,Age,Street name,street number,city name
換算表——
平面文件 - Name,Age,Street name,street number,city name
換算表——

Name-FullName
Age-Age
Street Name-AddressDetail-StreetName
Street Number-AddressDetail-StreetNumber
City Name-AddressDetail-CityName

xml 文件

    <?xml version="1.0" encoding="UTF-8"?> 
    <Envelop>
       <FullName>Steve Mate</FullName>
       <Age>22</Age> 
       <AddressDetail>
               <StreetName>Rockford</StreetName>
               <StreetNumber>111</StreetNumber>
               <CityName>Alimena</CityName> 
       </AddressDetail>
    </Envelop>

實施它的最佳方法是什么? 它可以與MVC一起使用嗎? 使用XElement嗎?

我做過很多次類似的事情。

這沒有什么特別的技巧。 您需要解析輸入文件以獲取所需的元素,然后您需要使用數據創建 XML 文件。

我不知道任何現有的方法來轉換您的特定文本文件格式。

以下代碼應該適合您

var lines = text.Split(new[] {"\r", "\n", "\r\n"}, 0);
var xDoc = new XDocument(new XElement("Envelop"));
foreach (var line in lines)
{
    var values = line.Split('-');
    var parentNode = xDoc.Root;
    foreach (var value in values.Reverse().Skip(1))
    {
        var name = value.Replace(" ", "");
        var node = parentNode.Element(name);
        if (node == null)
        {
            node = new XElement(name);
            parentNode.Add(node);
        }
        parentNode = node;
    }
    parentNode.Value = values.Last();
}
  • 根據換行符拆分文本。
  • 對於每一行,根據-
  • 取根為起始節點
  • 對於分割線中的每個值,跳過第一項...
    • 刪除空格(節點名稱中不能有空格)。
    • 獲取具有該名稱的子節點
    • 如果它不存在,請創建它。
    • 將當前父節點設置為此節點。
  • 最后將此節點的值設置為拆分值中的最后一項

dotnetfiddle

Output:

<Envelop>
  <FullName>FullName</FullName>
  <Age>Age</Age>
  <AddressDetail>
    <StreetName>StreetName</StreetName>
    <StreetNumber>StreetNumber</StreetNumber>
    <CityName>CityName</CityName>
  </AddressDetail>
</Envelop>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM