質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

Q&A

解決済

1回答

368閲覧

C#のLINQでXMLの追記について教えてください。

picko

総合スコア52

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

0グッド

1クリップ

投稿2018/04/13 06:23

編集2018/04/13 07:20

####前提・実現したいこと
C#のLINQでXMLの追記について教えてください。

####試したこと
下記のようなXMLに追記します。

XML

1<?xml version="1.0" encoding="utf-8"?> 2 <People xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 3 <PeopleGroup> 4 <Person Name = "保坂" /> 5 <Person Name = "朝倉" /> 6 </PeopleGroup> 7 </People>

C#

1public void Add(string path) 2{ 3 //現在のxmlを読み込む 4 var projects = XElement.Load(path); 5 //追加するitem 6 var item = new XElement("PoepleGroup", 7 new XElement("Person", 8 new XAttribute("Name", "田村") 9 ) 10 ); 11 //追加するitemをxmlFileに追加 12 projects.Add(item); 13 //xmlを保存 14 projects.Save(csprojpath); 15}

できた結果

XML

1<?xml version="1.0" encoding="utf-8"?> 2 <People xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 3 <PeopleGroup> 4 <Person Name = "保坂" /> 5 <Person Name = "朝倉" /> 6 </PeopleGroup> 7 <PeopleGroup xmlns=""> 8 <Person Name="田村"</Person> 9 </PeopleGroup> 10 </People>

追記はできたのですが、xmlns=""という文字が入ってしまいました。

こうなってほしい。

XML

1<?xml version="1.0" encoding="utf-8"?> 2 <People xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 3 <PeopleGroup> 4 <Person Name = "保坂" /> 5 <Person Name = "朝倉" /> 6 <Person Name = "田村" /> 7 </PeopleGroup> 8 </People>

アドバイスお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ただ単にxmlnsを消したいのであれば、

csharp

1var projects = XElement.Load(stream); 2var ns = projects.Name.Namespace; 3//追加するitem 4var item = new XElement(ns + "PoepleGroup", 5 new XElement(ns + "Person", 6 new XAttribute("Name", "田村") 7 ) 8);

このように、ネームスペースを付けてXElementを生成すればよいですが、

ゴールは一つのPeopleGroupに全員入れることなんですよね?
であれば、新しいXElementを作らずに、既存のPeopleGroupに追加する形に
しないといけません。その際にもネームスペースが必要です。

csharp

1//現在のxmlを読み込む 2var projects = XElement.Load(path); 3var ns = projects.Name.Namespace; 4//追加先のPeopleGroup 5var item = projects.Elements(ns + "PeopleGroup").First(); 6//追加するPersonをitemに追加 7item.Add( 8 new XElement(ns + "Person", 9 new XAttribute("Name", "田村") 10 ) 11); 12//xmlを保存 13projects.Save(csprojpath);

投稿2018/04/13 07:56

sh_akira

総合スコア380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問