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>
그러나 예를 들어 입력이 메일이 비어 있으면 결과 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
.
제휴하지 않습니다 StackOverflow