2017-05-25 2 views
0

Ich versuche XML Datei zu erstellen und einige Daten zu schreiben.Wie schreibe ich eine Ziffer mit XmlDocument in C#?

Aber ich habe ein Problem. Ich weiß nicht, wie man einen Wert in diese Datei schreibt. (Ich denke, das Schreiben einer string muss in Ordnung sein)

Hier ist mein Code

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); 

ich so etwas wie dies nach der Arbeit meines Programms erhalten muss:

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

Können Sie mir helfen? Vielen Dank.

+0

was ist der aktuelle Wert auf den gewünschten Wert verglichen? – WhatsThePoint

+0

Ich meine, ich weiß nicht, wie man eine Ziffer in Xml schreibt. Zum Beispiel muss ich während der ersten „für“ Iteration ein int i = 0 bis ID schreiben. – tank0412

+0

Ihr Compiler gibt einen Fehler, weil die 'XmlElement.AppendChild()' Methode einen 'XmlNode' erwartet. Aber Sie geben es eine ganze Zahl. Ich habe eine funktionierende Probe als Antwort gegeben. Schaut es euch an ... Hoffentlich hilft es! – Abhishek

Antwort

0

Verwenden XmlDocument auf diese Weise:

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"); 
    } 
} 

Ausgang:

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

Ja, es funktioniert. Vielen Dank. – tank0412

+0

können Sie es als Antwort dann markieren? – Abhishek

1

Ich würde Ihnen Klasse Serialisierung vorschlagen.

Stellen Sie Klassen bereit, die Ihre Datenstruktur widerspiegeln und serialisieren. Zum Beispiel können Klassen wie folgt sein:

[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; } 
} 

Attribut XmlRoot sagt Serializer wie Wurzelelement zu nennen, während XmlArray und XmlArrayItem steuern, wie der Blöcke und Blockelement auflistet wird serialisiert werden. Wenn Sie Ihre Klassen füllen, serialisieren Sie sie einfach in 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); 
} 

resultierenden 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

Ja, danke. Ich weiß über die Serialisierung und ich denke, dass es viel convinient als XmlDocument Sachen, aber mein Code des Programms ist nicht in meiner Universität genehmigt werden, weil Sachen mit der Serialisierung von Professor verweigert – tank0412

+0

@ tank0412 Kein Problem, ich bin froh, Sie zu lösen Ihr Problem, dank Abhishek. – Nino

Verwandte Themen