9

私が使用している方法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ますか?

4

4 に答える 4

22

あなたの出力は正しいです。コンテンツのない要素は と記述し<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();
于 2009-07-24T07:22:09.410 に答える
5

失敗しない<Tag/>のは単なるショートカットです<Tag></Tag>

于 2009-07-24T07:21:39.567 に答える
2

コードは次のようになります。

using (XmlWriter writer = XmlWriter.Create("filename.xml"))
{
    writer.WriteStartElement("User");
    writer.WriteElementString("Username", inputUserName);
    writer.WriteElementString("Email", inputEmail);
    writer.WriteEndElement();
}

これにより、例外が発生した場合のリソースリークが回避され、適切な方法でXmlReaderが作成されます(.NET 2.0以降)。

于 2009-07-24T13:22:50.873 に答える