C#の:XmlTextWriter.WriteElementStringは空の文字列で失敗?
-
19-09-2019 - |
質問
私は、たとえば、XmlTextWriter
とそのWriteElementString
メソッドを使用しています:
XmlTextWriter writer = new XmlTextWriter("filename.xml", null);
writer.WriteStartElement("User");
writer.WriteElementString("Username", inputUserName);
writer.WriteElementString("Email", inputEmail);
writer.WriteEndElement();
writer.Close();
期待されるXML出力は次のとおりです。
<User>
<Username>value</Username>
<Email>value</Email>
</User>
例えばinputEmailが空の場合は、以下のようにしかし、結果のXMLは、私が入手ます:
<User>
<Username>value</Username>
<Email/>
</User>
私はそれがあることを期待する一方ます:
<User>
<Username>value</Username>
<Email></Email>
</User>
私が間違って何をしているのですか? XmlTextWriter
を使用して簡単な方法で、私の期待される結果を達成するための方法はありますか?
解決
あなたの出力は正しいです。コンテンツのない要素は<tag/>
のように記述する必要があります。
あなたはWriteFullEndElementを呼び出すことにより、完全なタグの使用を強制することができます()
writer.WriteStartElement("Email");
writer.WriteString(inputEmail);
writer.WriteFullEndElement();
その意志出力<Email></Email>
をinputEmailは空です。
あなたは何度もその多くを行いたい場合は、あなたが拡張メソッドを作成することができます:
public static void WriteFullElementString(this XmlTextWriter writer,
string localName,
string value)
{
writer.WriteStartElement(localName);
writer.WriteString(value);
writer.WriteFullEndElement();
}
次に、あなたのコードはなるます:
writer.WriteStartElement("User");
writer.WriteFullElementString("Username", inputUserName);
writer.WriteFullElementString("Email", inputEmail);
writer.WriteEndElement();
他のヒント
これは<Tag/>
に失敗しません。
<Tag></Tag>
のためだけのショートカットです あなたのコードは次のようになります。
using (XmlWriter writer = XmlWriter.Create("filename.xml"))
{
writer.WriteStartElement("User");
writer.WriteElementString("Username", inputUserName);
writer.WriteElementString("Email", inputEmail);
writer.WriteEndElement();
}
これは、例外の場合にリソースリークを回避し、そして(.NET 2.0以降)のXmlReaderを作成するための適切な方法を使用します。
誰かがそれを必要とする場合に、ここにこれを残します。上記の答えのどれも私のためにそれを解決していない、あるいはやり過ぎのように思えたからです。
FileStream fs = new FileStream("file.xml", FileMode.Create);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter w = XmlWriter.Create(fs, settings);
w.WriteStartDocument();
w.WriteStartElement("tag1");
w.WriteStartElement("tag2");
w.WriteAttributeString("attr1", "val1");
w.WriteAttributeString("attr2", "val2");
w.WriteFullEndElement();
w.WriteEndElement();
w.WriteEndDocument();
w.Flush();
fs.Close();
トリックの のXmlWriterSettings.Indent =真のを設定しての のたXmlWriter ののに追加しました。
の の編集:のの
別の方法として使用することもできます。
w.Formatting = Formatting.Indented;
の代わりにXmlWriterSettings
を加える。
所属していません StackOverflow