[LINQ to Xml] 要素を追加する

任意の要素を追加するには XElementクラスの Addメソッドを使用します。

以下のXMLファイルを準備して(前回までの記事を参照)、値を追加する方法について見ていきます。

Company.xml

<?xml version="1.0" encoding="utf-8"?>
<部署データ>
  <部署 id="0001">
    <部署名>企画部</部署名>
    <部長名>佐藤</部長名>
  </部署>
  <部署 id="0002">
    <部署名>開発部</部署名>
    <部長名>高橋</部長名>
  </部署>
  <部署 id="0003">
    <部署名>営業部</部署名>
    <部長名>伊藤</部長名>
  </部署>
</部署データ>

ルート要素の <部署データ>には idが0001~0003の3つの部署データがあります。

ここに4つめの要素として、以下を追記する例で説明します。

<部署 id="0004">
  <部署名>購買部</部署名>
  <部長名>松田</部長名>
</部署>

まずは、XMLファイルを読み込みます。

その後、ルート要素を取得し(xDoc.Elements().First())、Addメソッドで要素を追加します。

VBの例

Dim xDoc = XDocument.Load("C:\Work\MyCompany.xml")

Dim elem = New XElement("部署",
               New XAttribute("id", "0004"),
               New XElement("部署名", "購買部"),
               New XElement("部長名", "松田")
               )

xDoc.Elements().First().Add(elem)

Console.WriteLine(xDoc.ToString())

C#の例

var xDoc = XDocument.Load(@"C:\Work\MyCompany.xml");

var elem = new XElement("部署",
               new XAttribute("id", "0004"),
               new XElement("部署名", "購買部"),
               new XElement("部長名", "松田")
               );

xDoc.Elements().First().Add(elem);

Console.WriteLine(xDoc.ToString());

[LINQ to Xml] XMLファイルを読み込む

XMLファイルを読み込むには、XDocumentクラスのLoadメソッドを使用します。

Loadメソッドの引数には、読み込むxmlファイルを指定します。

以下にXMLファイルを読み込む例を示します。

VBの例

Dim xDoc = XDocument.Load("C:\Work\MyCompany.xml")

Console.WriteLine(xDoc.ToString())

C#の例

var xDoc = XDocument.Load(@"C:\Work\MyCompany.xml");

Console.WriteLine(xDoc.ToString());

上記の実行結果を以下に示します。

XMLファイル読み込み

[LINQ to Xml] 属性を設定する

要素を作成する際に属性を設定するには XAttributeクラスを使用します。

今回作成するプログラムから作成されるXMLは以下の通りです。

部署にid属性を設定しています。

<?xml version="1.0" encoding="utf-8"?>
<!--部署データ-->
<部署データ>
  <部署 id="0001">
    <部署名>企画部</部署名>
    <部長名>佐藤</部長名>
  </部署>
  <部署 id="0002">
    <部署名>開発部</部署名>
    <部長名>高橋</部長名>
  </部署>
  <部署 id="0003">
    <部署名>営業部</部署名>
    <部長名>伊藤</部長名>
  </部署>
</部署データ>

コード例は以下の通りです。

XAttributeの第1引数には属性名を、第2引数に属性値を指定します。

VBの例

Dim XDoc = New XDocument(New XDeclaration("1.0", "utf-8", True),
        New XComment("以下部署データ"),
        New XElement("部署データ",
          New XElement("部署",
               New XAttribute("id", "0001"),
               New XElement("部署名", "企画部"),
               New XElement("部長名", "佐藤")
          ),
          New XElement("部署",
               New XAttribute("id", "0002"),
               New XElement("部署名", "開発部"),
               New XElement("部長名", "高橋")
          ),
          New XElement("部署",
               New XAttribute("id", "0003"),
               New XElement("部署名", "営業部"),
               New XElement("部長名", "伊藤")
               )
          )
    )

XDoc.Save("C:\Work\MyCompany.xml")

c#の例

var XDoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"),
    new XComment("部署データ"),
    new XElement("部署データ",
      new XElement("部署",
           new XAttribute("id", "0001"),
           new XElement("部署名", "企画部"),
           new XElement("部長名", "佐藤")
      ),
      new XElement("部署",
           new XAttribute("id", "0002"),
           new XElement("部署名", "開発部"),
           new XElement("部長名", "高橋")
      ),
      new XElement("部署",
           new XAttribute("id", "0003"),
           new XElement("部署名", "営業部"),
           new XElement("部長名", "伊藤")
           )
      )
);

XDoc.Save(@"C:\Work\MyCompany.xml");

[LINQ to Xml] コメントを追加する

コメントを追加するには XmlCommentクラスを使用します。

今回作成するプログラムから作成されるXMLは以下の通りです。
2行目がXMLコメントです。

<?xml version="1.0" encoding="utf-8"?>
<!--以下部署データ-->
<部署データ>
  <部署>
    <部署名>企画部</部署名>
    <部長名>佐藤</部長名>
  </部署>
  <部署>
    <部署名>開発部</部署名>
    <部長名>高橋</部長名>
  </部署>
  <部署>
    <部署名>営業部</部署名>
    <部長名>伊藤</部長名>
  </部署>
</部署データ>

上記のXMLファイルを作成するコードは以下の通りです。

2行目でXmlCommentクラスを使用しています。

VBの例

Dim XDoc = New XDocument(New XDeclaration("1.0", "utf-8", True),
        New XComment("以下部署データ"),
        New XElement("部署データ",
          New XElement("部署",
               New XElement("部署名", "企画部"),
               New XElement("部長名", "佐藤")
          ),
          New XElement("部署",
               New XElement("部署名", "開発部"),
               New XElement("部長名", "高橋")
          ),
          New XElement("部署",
               New XElement("部署名", "営業部"),
               New XElement("部長名", "伊藤")
               )
          )
    )

XDoc.Save("C:\Work\MyCompany.xml")

C#の例

var XDoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"),
    new XComment("以下部署データ"),
    new XElement("部署データ",
      new XElement("部署",
           new XElement("部署名", "企画部"),
           new XElement("部長名", "佐藤")
      ),
      new XElement("部署",
           new XElement("部署名", "開発部"),
           new XElement("部長名", "高橋")
      ),
      new XElement("部署",
           new XElement("部署名", "営業部"),
           new XElement("部長名", "伊藤")
           )
      )
);

XDoc.Save(@"C:\Work\MyCompany.xml");

 

[LINQ to Xml] 値を追加する

前回はLINQ to XMLを使用して、XMLファイルを作成する方法について紹介しました。

今回はXMLファイルの作成と同時に値を追加する方法について見ていきます。


 

今回作成するプログラムから作成されるXMLは以下の通りです。

作成されるXML

<?xml version="1.0" encoding="utf-8"?>
<部署データ>
  <部署>
    <部署名>企画部</部署名>
    <部長名>佐藤</部長名>
  </部署>
  <部署>
    <部署名>開発部</部署名>
    <部長名>高橋</部長名>
  </部署>
  <部署>
    <部署名>営業部</部署名>
    <部長名>伊藤</部長名>
  </部署>
</部署データ>

XMLElementクラスで値を設定する

前回は、XMLElementの第1引数のみを設定し、要素だけを作成しましたが、第2引数を設定すると、第1引数の要素に対する値を設定することができます。

VB

Public Sub New ( _
	name As XName, _  '要素名
	content As Object _  '要素の値
)

C#

public XElement(
	XName name,  // 要素名
	Object content  // 要素の値
)

このことを利用して、以下のようなコードを記述すると、最初に示したXMLファイルを作成することができます。

VBの例

Dim XDoc = New XDocument(New XDeclaration("1.0", "utf-8", True),
        New XElement("部署データ",
          New XElement("部署",
               New XElement("部署名", "企画部"),
               New XElement("部長名", "佐藤")
          ),
          New XElement("部署",
               New XElement("部署名", "開発部"),
               New XElement("部長名", "高橋")
          ),
          New XElement("部署",
               New XElement("部署名", "営業部"),
               New XElement("部長名", "伊藤")
               )
          )
    )

XDoc.Save("C:\Work\MyCompany.xml")

C#の例

var XDoc = new XDocument(new XDeclaration("1.0", "utf-8", "true"),
    new XElement("部署データ",
      new XElement("部署",
           new XElement("部署名", "企画部"),
           new XElement("部長名", "佐藤")
      ),
      new XElement("部署",
           new XElement("部署名", "開発部"),
           new XElement("部長名", "高橋")
      ),
      new XElement("部署",
           new XElement("部署名", "営業部"),
           new XElement("部長名", "伊藤")
           )
      )
);

XDoc.Save(@"C:\Work\MyCompany.xml");