2009-08-17 81 views
0

以名稱 - 值對的形式給出一堆數據我如何將它構造成xml?將名稱值對轉換爲xml

如:

標題:先生

名稱:約翰

姓:李四

爲有效的XML sililar到:

<Data> 
<Title>Mr</Title> 
<Name >John</Name > 
<Surname >Doe</Surname > 
</Data> 
+1

你已經給了你希望看到的轉變的一個例子。你在問如何實際編寫代碼來做到這一點?你試過什麼了? – 2009-08-17 11:48:46

+2

新的xml用戶最大的陷阱就是試圖用xHTML來看你想要的樣子。我的建議是:只要它有效,無論它是否有效,讓它工作。不要試圖讓它「看」你認爲它應該看起來如何。它只是浪費時間。 – Will 2009-08-17 11:59:01

+0

@將:ACK。大多數時候,關心序列化XML *看起來如何*意味着深刻的誤解,即XML是文本,可以用文本工具(如正則表達式)處理。一旦你犯了這個錯誤,你就開始關心輸出XML是如何呈現的。 – Tomalak 2009-08-17 12:30:51

回答

0

你可以做,在System.Linq.Xml

var data=nameValuePair.Value; 
var xelement=new XElement("Data", 
         new XElement("Title",data.Title), 
         new XElement("Name",data.Name), 
         new XElement("Surname",data.Surname)); 

使用的XElement這是否回答您的問題?

+0

我使用.net 2.0 – raklos 2009-08-17 12:03:49

+1

這是一個恥辱,Linq到XML值得升級到3.5所有由本身IMO – 2009-08-17 12:08:58

0

無論你做什麼,都可以使用支持XML的API來完成。不要簡單地讀取字符串並在標籤之間寫出。這很誘人,因爲它很方便,但您必須擔心字符和實體編碼以正確生成XML。

2

假設你有一個鍵值pairs..something像字典一樣..

XElement xe = new XElement("Data", from kvp in dict 
          select new XElement(kvp.Key, kvp.Value)); 
0

如果所有的數據總是在說形式&你有一大堆的話, 創建一個類與成員&將其序列化爲xml。

public class test 
    { 
    public string title; 
    public string name; 
    public string surname; 
    } 

    void main() 
    { 
    List<test> t = new List<test>(); 

    test t1 = new test(); 
    t1.title = "Mr."; 
    t1.name = "John"; 
    t1.surname = "Doe"; 
    . 
    . 
    . 
    test tn = new test(); 
    t.Add(t1); 
    t.Add(t2); 
    . 
    . 
    . 
    . 
    t.Add(tn); 


    //Serialize to xml. 
    try 
    { 
        using (FileStream fs = new FileStream(szFileName, FileMode.Create)) 
        { 
         XmlSerializer xs = new XmlSerializer(typeof(List<test>)); 
         xs.Serialize(fs, t); 
        } 

    } 
    catch(Exception Ex) 
    { 
    Messagebox.Show(Ex.ToString()); 
    } 


    //And deserialize the data from xml to objects 
try 
{ 
         using (System.IO.FileStream fs = new FileStream(szDataFile,FileMode.Open)) 
         { 
         System.Xml.Serialization.XmlSerializer xs = new XmlSerializer(typeof(List<test>)); 
         List<test> t1 = new List<test>(); 
         t1 = xs.Deserialize(fs) as List<test>; 
         } 
} 
catch(Exception Ex) 
{ 
    Messagebox.Show(Ex.ToString()); 
} 

} 
0

使用Gelatin這個語法:

define nl /[\r\n]/ 
define ws /\s+/ 
define fieldname /\w+/ 
define value /[^\r\n,]/ 

grammar input: 
    match nl: 
     do.skip() 
    match fieldname ':' ws value nl: 
     out.add('$0', '$3')