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

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

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

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

C#

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

Q&A

解決済

2回答

2507閲覧

C#で変わった?xmlファイルの出力について。

yuki00079

総合スコア45

XML

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

C#

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

0グッド

1クリップ

投稿2018/08/27 00:30

編集2018/08/27 01:33

前提・実現したいこと

C#でXMLファイルを出力するプログラムを作成しております。
下記のようなレコードを作成できず、困っています。
例:
<詳細>
<食費>10000円
<コメント>TEST</コメント>
</食費>
</詳細>

<食費>10000円の後ろに改行を入れたいのですがうまくいきません。

発生している問題・エラーメッセージ

XMLファイルを扱い始めて間もないのもあるのですが、値がタグとタグの間ではなく、
タグの横に値と改行が入っております。

該当のソースコード

var xml = New XElement("詳細", New XElement("食費", "10000円", New XElement("コメント", "TEST"))) '上記コードでは下記のように出力される。 '<詳細> '<食費>10000円<コメント>TEST</コメント></食費> '</詳細> ’上記の出力だと<食費>10000円(改行なし)<コメント>TEST</コメント>(改行なし)</食費> var xml = New XElement("詳細", New XElement("食費", "10000円" & Environment.NewLine, New XElement("コメント", "TEST"))) '上記だと中途半端になる。 '<詳細> '<食費>10000円 '<コメント>TEST</コメント></食費> '</詳細> ’上記の出力だと<食費>10000円(改行あり)<コメント>TEST</コメント>(改行なし)</食費>

補足情報(FW/ツールのバージョンなど)

.net4.5
C#

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

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

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

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

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

otftrough

2018/08/27 00:38

Add()を使っても同じようになりますか?
退会済みユーザー

退会済みユーザー

2018/08/27 00:47

> 上記のような仕様をうまく出力できません。 ←「仕様」とはなんですか? 「うまく」とはどういうことですか? 具体的に説明できませんか?
yuki00079

2018/08/27 00:59

説明が不十分ですみません。目的としているレコードが作成できないということです。
退会済みユーザー

退会済みユーザー

2018/08/27 01:23

> 目的としているレコード ← その意味も分かりません、「例」で書いたものが目的なら、作成できているように見えますが? 何を持って「できない」と言ってますか?
YAmaGNZ

2018/08/27 01:37

質問者さんは例のように改行が入ってないと言っているのが読み取れますが・・・まぁデータ的に改行の意味ある?ってのは分からないでもないですが
退会済みユーザー

退会済みユーザー

2018/08/27 02:36

そうではないかとは思いますが、そのあたりは質問者さんに答えてもらいたいですね。ホントの目的は何なのかをもう一度考えたもらったうえで。
guest

回答2

0

XML はデータの構造を表すものです。
人間が目で見て読むことも考慮されたフォーマットではありますが、その本質はデータを機械的に処理するためのものです。

この質問では、データの構造ではなく XML 自身を整形しようとしています。
この場合は、一度文字列に直してから改行を挿入するといいと思います。

C#

1var xml = new XElement("詳細", new XElement("食費", "10000円", new XElement("コメント", "TEST"))); 2Console.WriteLine(Regex.Replace(xml.ToString(SaveOptions.DisableFormatting), "(?<=>)", "\n"));

投稿2018/08/27 03:03

Zuishin

総合スコア28660

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

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

yuki00079

2018/08/27 06:43

ご回答いただきありがとうございます。 >その本質はデータを機械的に処理 その通りだと思います。本来のXMLフォーマットから離れた形式であることは理解しておりましたが、対象のレコードを再現する必要がありお聞きした次第です。
Zuishin

2018/08/27 08:07 編集

本来の XML フォーマット? そんな話はしていません。 文字列化する XML の見た目を整えるだけのためにデータを改変するのはスマートではなく、バグの原因にもなり得ます。 またデータの改変は文字列化した時の改行位置を保証しないので将来的に爆弾を抱えます。 そういう話です。 ですから、文字列化する前ではなく文字列化した後の加工を勧めました。 それを実装したのが回答に記したコードです。
guest

0

ベストアンサー

やるとすれば

C#

1xml = new XElement("詳細", new XElement("食費", "10000円" + Environment.NewLine, new XElement("コメント", "TEST"), Environment.NewLine)); 2

こうとか?

投稿2018/08/27 02:07

YAmaGNZ

総合スコア10242

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

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

yuki00079

2018/08/27 06:44

ご回答いただきありがとうございます。 目的のレコードを再現することができました。
退会済みユーザー

退会済みユーザー

2018/08/27 23:14

上にも書きましたが、ホントの目的とは何か良く考えてみてください。改行コードはデータではないはず。Zuishin さんの回答を良く読んで理解してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問