2011-01-27 97 views
1

我正在使用LinqXML創建一個XML文件。LINQ to XML XElement節點

string value = "Steet,<BR> </BR> City"; 
XElement address = new XElement("Address", value); 

一次我寫的xml文件,顯示的地址值作爲Steet,&lt;BR&gt &lt;/BR&gt 我只是需要,因爲它是和原版一樣。 (即使它不能很好地形成)

回答

4

那麼,如果不能很好地形成的東西那就不要指望能夠把它當作XML。因此,如果你想把沒有格式良好的HTML標記放到一個XML元素中,那麼考慮使用CDATA部分,例如

string value = "Steet,<BR> </BR> City"; 
    XElement address = new XElement("Address", new XCData(value)); 

這將導致

<Address><![CDATA[Steet,<BR> </BR> City]]></Address> 

如果你想解析值作爲XML然後在片段模式一個XmlReader爲此例如

static void Main() 
{ 
    string value = "Steet,<BR> </BR> City"; 
    XElement address = new XElement("Address", ParseFragment(value)); 
    Console.WriteLine(address); 
} 

static IEnumerable<XNode> ParseFragment(string fragment) 
{ 
    using (StringReader sr = new StringReader(fragment)) 
    { 
     using (XmlReader xr = XmlReader.Create(sr, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment })) 
     { 
      xr.Read(); 
      XNode node; 
      while (!xr.EOF && (node = XNode.ReadFrom(xr)) != null) 
      { 
       yield return node; 
      } 
     } 
    } 
} 

導致

<Address>Steet,<BR> </BR> City</Address> 
+0

謝謝馬丁。由於我是新的投票,只允許我增加1。再次感謝這個例子。 – dps123 2011-01-27 18:30:04

0

你需要用它在CDATA保持它

+0

謝謝lvanonv。 – dps123 2011-01-27 18:41:11

1

我不認爲你需要改變什麼。 &lt;&gt;是尖括號如何在XML中轉義。讀取字符串值時,XML解析器會自動將它們重新轉換爲字面尖括號。 CDATA只是另一種逃避尖括號的方式。在這種情況下,他們都完成了同樣的事情。如果您使用原始代碼並使用XML解析器讀取<Address>節點的值,則返回的字符串將是Street,<BR> </BR> City。改變轉換爲CDATA的方法實際上並沒有改變任何東西,除了使你的XML難以閱讀。

如果您希望<BR />標記實際上是XML文檔的一部分,那麼您應該將其作爲文檔的一部分。也就是說...

new XElement("Address", "Street,", new XElement("BR"), " City")