2017-05-25 10 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問題はありません問題、Abhishekのおかげです。 – Nino

関連する問題