2009-05-25 39 views
3

C#を使用してXMLファイルを作成または生成するにはどうすればよいですか?XMLファイルを作成または生成する方法

<?xml version="1.0" encoding="UTF-8"?> 
<pages> 
<page name="Page Name 1" url="/page-1/" /> 
<page name="Page Name 2" url="/page-2/" /> 
<page name="Page Name 3" url="/page-3/" /> 
<page name="Page Name 4" url="/page-4/" /> 
</pages> 

答えて

10
using System.Linq; 
using System.Xml; 
using System.Xml.Linq; 

// ... 

using (var writer = XmlWriter.Create("output.xml")) 
    new XDocument(
     new XDeclaration("1.0", "UTF-8", null), 
     new XElement("pages", 
      Enumerable.Range(1, 4) 
       .Select(i => new XElement("page", 
            new XAttribute("name", "Page Name " + i), 
            new XAttribute("url", "/page-" + i + "/")))) 
    ).WriteTo(writer); 
+0

プリティコードです:P ~~~ – jgallant

+0

本当にかわいいコード。 – crauscher

3

私はこのような何かを推測:

System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(Server.MapPath("pages.xml"), System.Text.Encoding.UTF8); 

     writer.WriteStartDocument(); 
     writer.WriteStartElement("pages"); 

     writer.WriteStartElement("page"); 
     writer.WriteAttributeString("name", "Page name 1"); 
     writer.WriteAttributeString("url", "Page url 1"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("page"); 
     writer.WriteAttributeString("name", "Page name 2 "); 
     writer.WriteAttributeString("url", "Page url 2"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("page"); 
     writer.WriteAttributeString("name", "Page name 3"); 
     writer.WriteAttributeString("url", "Page url 3"); 
     writer.WriteEndElement(); 

     writer.WriteEndElement(); 
     writer.WriteEndDocument(); 
     writer.Close(); 
+0

質問には具体的にXML文書を書く方法を尋ねるので、私は「LINQメソッド」よりもこの方が好意的です(私がそれを言い表せない場合)。 XML文書でクエリを実行して遊びたい場合は、Mehrdadの答えがより適切でしょう。私はどちらかと思う作品。 –

2

あなたは、.NET Framework 2.0を使用している場合は、他のあなたがXmlTextWriterを使用することができ、XMLを書くことXmlWriterクラスを使用する必要があります。

.NET 3以降の場合は、System.Xml.Linq名前空間のXDocumentクラスを使用できます。

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Encoding = Encoding.UTF8; 
settings.Indent = true; 
using (XmlWriter writer = XmlWriter.Create(@"c:\path\file.xml", settings)) 
{ 

    writer.WriteStartElement("pages"); 

    for (int i = 1; i < 5; i++) 
    { 
     writer.WriteStartElement("page"); 
     writer.WriteAttributeString("name", "Page Name " + i.ToString()); 
     writer.WriteAttributeString("url", string.Format("/page-{0}/", i)); 
     writer.WriteEndElement(); // page 
    } 
    writer.WriteEndElement(); // pages 
} 
5

かなりストレートフォワードな方法は、このようなことができます。そのサイズのXML文書の場合、XDocumentはそれを処理するのにかなり非効率的です。少なくとも、私はXDocumentをどのように使うべきかを理解しています。メモリ内の大きなドキュメントを処理してLINQでそれらを照会する場合は、XmlDocument/XDocumentを使用します。私が間違っているなら、私を修正して、私の謝罪を受け入れてください。

第2に、私の理解では、あなたのXML構造は間違っています。私はこの権利を持っていない場合は私を修正してくださいが、属性は要素の値が何であるかを記述するメタデータです。これは値そのものとしては使用されません。あなたのケースでは、あなたの構造が

...のような
<pages> 
    <page> 
     <name href="url">Page Name 1</name> 
    </page> 
</pages> 

何かするか、あなたは本当に肛門

<pages> 
    <page> 
     <name>Page Name 1 
     <url>http://page/</url> 
    </page> 
</pages> 

ようにしたい場合、私はこの答えはどのshouldn(属性議論対恐ろしい要素を開きます恐れ

編集:これは質問に対する直接の回答ではありません。私はそれがメタコンメントに近いと感じています(質問の答えについてのコメント)。それが関係していても、どこに置くべきかはわかりませんでしたが、言及する価値はあると思います。

+0

私が使用する方法(正確なLInQ)。 +1 – Cerebrus

0

与えられた解答上の点のカップル:

1
using System.Xml; 
//... 
XmlDocument xmldoc = new XmlDocument(); 
XmlElement pages = xmldoc.CreateElement("pages"); 
XmlElement page = null; 

for(int i = 1; i <= 4; i++) 
{ 
    page = xmldoc.CreateElement("page"); 
    page.SetAttribute("name", "Page Name " + i); 
    page.SetAttribute("url", "/page-" + i + "/"); 
    pages.AppendChild(page); 
} 

xmldoc.AppendChild(xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null)); 
xmldoc.AppendChild(pages); 
xmldoc.Save("output.xml"); 
0

また、XMLデータバインディングを見ることもできます。このアプローチでは、このように見えるコードが得られます。

Pages pages = new Pages(); 
for(int i=1; i<=4;i++) 
{ 
    Page p = new Page(); 
    p.name = "Page Name " + i; 
    p.url = "/page-" + i + "/"; 
    pages.Pages.Add(p); 
} 
Console.Write(pages.ToXml()); 

は、ここで "A closer look at XML Data Binding"

を見てくださいも良いlist of xml data binding tools

関連する問題