2013-07-12 172 views
0

我想用c#來格式化我的xml,看起來像這樣。C#創建格式化的xml

<House> 
    United States 
    <Home> 
     NewYork 
     Lagos 
     California 
    </Home> 
</House> 

有什麼辦法可以強制縮進嗎?它不縮進不具有子元素的任何標記,它確實是這樣一些東西:

<House> 
    United States 
    <Home>NewYork Lagos California </Home> 
</House> 

OR

<House>United States </House? 

回答

0

你將不得不把換行符常量到你的價值觀。就xml而言,「NewYork Lagos California」是一個值

0

如果您可以更改xml格式以將所有內容綁定到元素中,則可以使用以下代碼。我將在代碼下面粘貼輸出;注意它不會格式化你的xml字符串。

var dodgyXmlString = "<House>United States<Home>NewYork Lagos California</Home></House>"; 
var validXmlString = "<House><Place>United States</Place><Home>NewYork</Home><Home>Lagos</Home><Home>California</Home></House>"; 
var strings = new string[] { dodgyXmlString, validXmlString }; 

foreach(var xmlString in strings) 
{  
    var xmlDocument = new XmlDocument(); 
    xmlDocument.LoadXml(xmlString); 
    var sw = new StringWriter(); 
    var writer = new XmlTextWriter(sw) { Formatting = Formatting.Indented }; 
    xmlDocument.WriteTo(writer); 
    Console.WriteLine(sw.ToString()); 
} 

和輸出:

<House>United States<Home>NewYork Lagos California</Home></House> 
<House> 
    <Place>United States</Place> 
    <Home>NewYork</Home> 
    <Home>Lagos</Home> 
    <Home>California</Home> 
</House> 
0

另外,如果你不能這樣做,或者你沒事用迭代,你可以這樣做:

(「原始」包含您的標記)

string[] spliiter = raw.Split(new char[] { ' ', '\n' }); 
List<string> splitterList = spliiter.ToList<string>(), xml = new List<string>(); 
splitterList.RemoveAll(x => x == ""); 
string temp; 
for (int i = 0; i < splitterList.Count() - 1; i++) 
{ 
    temp = ""; 
    if (StringExtensions.ContainsAll(splitterList[i], new string[] { "<", ">" })) 
    { 
     temp = splitterList[i]; 
     xml.Add(temp); 
    } 
    else if (!splitterList[i].EndsWith("\r")) 
    { 
     if (StringExtensions.ContainsNone(splitterList[i], new string[] { "<", ">" })) 
     { 
      if (splitterList[i + 1].EndsWith("\r") || splitterList[i + 1].EndsWith("\r\n")) 
      { 
       temp = splitterList[i] + " " + splitterList[i + 1]; 
       xml.Add(temp); 
       i++; 
      } 
     } 
    } 
    else if (splitterList[i].EndsWith("\r") && StringExtensions.ContainsNone(splitterList[i], new string[] { "<", ">" })) 
    { 
     if (splitterList[i + 1].EndsWith("\r") && StringExtensions.ContainsNone(splitterList[i + 1], new string[] { "<", ">" })) 
     { 
      temp = splitterList[i]; 
      do 
      { 
       temp = temp + " " + splitterList[i + 1]; 
       i++; 
      } while (splitterList[i + 1].EndsWith("\r") && StringExtensions.ContainsNone(splitterList[i + 1], new string[] { "<", ">" }) || StringExtensions.ContainsNone(splitterList[i + 1], new string[] { "<", ">", "\r", "\n" })); 
      temp.Replace('\n', ' '); 
      xml.Add(temp); 
     } 
     else 
     { 
      temp = splitterList[i]; 
      xml.Add(temp); 
     } 
    } 
} 
xml = (xml.Select(s => (s.Replace('\r', ' ').Trim()))).ToList(); 
string final_xml = string.Join("\n", xml.ToArray()); 
+0

[Download](http://sdrv.ms/179ASJt) – ablaze