如何在C#中使用XmlDocument编写数字?

问题描述:

我正在尝试创建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

使用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

我会建议你类的序列。

制作反映您的数据结构并将其序列化的类。例如,类可以是这样的:

[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