2017-05-25 15 views
0

我正在嘗試創建XML文件並向其中寫入一些數據。如何在C#中使用XmlDocument編寫數字?

但我有一個問題。我不知道如何在這個文件中寫入一個值。 (我覺得寫一個string必須OK)

這裏是我的代碼

XmlDocument doc = new XmlDocument(); 
XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 
XmlElement root = doc.DocumentElement; 
doc.InsertBefore(xmlDeclaration, root); 
XmlElement element1 = doc.CreateElement(string.Empty, "Data", string.Empty); 
doc.AppendChild(element1); 
for (int i = 0; i < Program.Number; ++i) 
{ 
    XmlElement element2 = doc.CreateElement(string.Empty, "Block", string.Empty); 
    doc.AppendChild(element2); 
    XmlElement element3 = doc.CreateElement(string.Empty, "ID", string.Empty); 
    element3.AppendChild(i); //Compilator gives error there 
    element2.AppendChild(element3); 
    XmlElement element4 = doc.CreateElement(string.Empty, "Name", string.Empty); 
    XmlText text2 = doc.CreateTextNode(Colegue<string>.Name[i]); 
    element4.AppendChild(text2); 
    element2.AppendChild(element4) 
} 
doc.Save(Program.FileName); 

我的程序的工作後,我一定要得到的東西是這樣的:

<Data> 
    <Block> 
     <ID>0</ID> 
     <Name>Rob</Name> 
    </Block> 
    <Block> 
     <ID>1</ID> 
     <Name>Peter</Name> 
    </Block> 
</Data> 

你能幫助我嗎?謝謝。

+0

什麼比理想值的當前值? – WhatsThePoint

+0

我的意思是我不知道如何在Xml中寫一個數字。 例如,我必須在第一次「for」迭代期間寫一個int i = 0給ID。 – tank0412

+0

你的編譯器給出了錯誤,因爲'XmlElement.AppendChild()'方法需要一個'XmlNode'。但是你給它一個整數。我已經給出了一個工作樣本作爲答案。檢查出來..希望它有幫助! – Abhishek

回答

0

使用XmlDocument這樣:

class Program 
{ 
    static List<string> Colleagues = new List<string>() { "Rob", "Peter"}; 
    static void Main(string[] args) 
    { 
     XmlDocument doc = new XmlDocument(); 
     XmlNode rootNode = doc.CreateElement("Data"); 
     doc.AppendChild(rootNode); 

     for (int i = 0; i < 2; i++) 
     { 
      XmlNode blockNode = doc.CreateElement("Block"); 
      XmlNode idNode = doc.CreateElement("ID"); 
      idNode.InnerText = i.ToString(); 
      blockNode.AppendChild(idNode); 
      XmlNode nameNode = doc.CreateElement("Name"); 
      nameNode.InnerText = Colleagues[i]; 
      blockNode.AppendChild(nameNode); 
      rootNode.AppendChild(blockNode); 
     } 
     doc.Save("XmlDocument.xml"); 
    } 
} 

輸出:

<Data> 
    <Block> 
    <ID>0</ID> 
    <Name>Rob</Name> 
    </Block> 
    <Block> 
    <ID>1</ID> 
    <Name>Peter</Name> 
    </Block> 
</Data> 
+0

是的,它的工作原理。萬分感謝。 – tank0412

+0

你能把它標記爲答案嗎? – Abhishek

1

我會建議你類的序列。

製作反映您的數據結構並將其序列化的類。例如,類可以是這樣的:

[Serializable] 
[XmlRoot("Data")] 
public class Data 
{ 
    [XmlArray("Blocks")] 
    [XmlArrayItem("Block")] 
    public List<Block> Blocks { get; set; } 
} 

[Serializable] 
public class Block 
{ 
    public string Name { get; set; } 
    public int ID { get; set; } 
} 

屬性XmlRoot告訴串行如何命名根元素,而XmlArrayXmlArrayItem控制如何將列出塊和塊元素都將被序列化。 當你填充你的類時,只需將它們序列化爲xml。

Data data = new Data(); 
data.Blocks = new List<Block>(); 
data.Blocks.Add(new Block() { ID = 0, Name = "Rob" }); 
data.Blocks.Add(new Block() { ID = 1, Name = "Peter" }); 
data.Blocks.Add(new Block() { ID = 2, Name = "Mary" }); 

XmlSerializer xs = new XmlSerializer(typeof(Data)); 
using (FileStream stream = new FileStream("c:\\test.xml", FileMode.Create)) 
{ 
    xs.Serialize(stream, data); 
} 

生成的XML

<?xml version="1.0"?> 
<Data xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Blocks> 
    <Block> 
     <Name>Rob</Name> 
     <ID>0</ID> 
    </Block> 
    <Block> 
     <Name>Peter</Name> 
     <ID>1</ID> 
    </Block> 
    <Block> 
     <Name>Mary</Name> 
     <ID>2</ID> 
    </Block> 
    </Blocks> 
</Data> 
+0

是的,謝謝。 我知道關於序列化,我認爲它比XmlDocument的東西更方便,但我的程序代碼將不會批准在我的大學,因爲使用序列化的東西被拒絕教授 – tank0412

+0

@ tank0412沒問題,我很高興你解決了你的問題問題,感謝阿布舍克。 – Nino

相關問題