문제

사용 중입니다 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>

그러나 예를 들어 입력이 메일이 비어 있으면 결과 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> 입력이 메일이 비어있을 때.

두 번 이상 그렇게하려면 확장 방법을 만들 수 있습니다.

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();
}

이는 예외의 경우 리소스 누출을 피하고 적절한 방법을 사용하여 XMLREADER (.NET 2.0 이후)를 만듭니다.

누군가가 필요로하는 경우를 대비하여 이것을 남겨 두십시오. 위의 답변 중 어느 것도 나를 위해 그것을 해결하지 못했거나 과잉처럼 보이지 않았기 때문입니다.

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 = true 그리고 그것을 추가하십시오 xmlwriter.

편집하다:

또는 사용할 수도 있습니다

w.Formatting = Formatting.Indented;

추가하는 대신 XmlWriterSettings.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top