2009-07-24 2 views
7
내가 예를 들어 XmlTextWriterWriteElementString 방법, 사용하고

:C# : 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 출력입니다 : 예를 들어 inputEmail이 비어있는 경우, 결과 XML은 내가 한 수

<User> 
    <Username>value</Username> 
    <Email>value</Email> 
</User> 

다음 :

<User> 
    <Username>value</Username> 
    <Email/> 
</User> 

나는 그것이 것으로 기대하는 반면 :

<User> 
    <Username>value</Username> 
    <Email></Email> 
</User> 

내가 잘못 뭐하는 거지? XmlTextWriter를 사용하여 간단한 방법으로 예상 된 결과를 얻을 수있는 방법이 있습니까?

답변

18

귀하의 출력이 올바른지 단지 바로 가기입니다. 내용이없는 요소는 <tag/>으로 작성해야합니다.

당신은()

writer.WriteStartElement("Email"); 
writer.WriteString(inputEmail); 
writer.WriteFullEndElement(); 

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(); 
+0

이 솔루션은 이상하게도 내 끝에서 작동하지 않습니다 –

+0

당신이 제공 한 똑같은 솔루션을 사용하고 WriteFullEndElement() 메서드가 작동하지 않는 것처럼 보입니다 ... Methinks this method is faulty. –

+0

C#에서 해결 방법을 찾았습니다. (string.Length == 0)이면 빈 문자열을 개행 이스케이프 문자 (예 : "\ n")로 대체하십시오. –

4

그것은 <Tag/>를 실패하지 않습니다는 <Tag></Tag>

+0

강제로 출력 할 수 있습니까? ? –

+0

나는 그렇게 생각하지 않는다. – RaYell

+0

이것이 문제인 경우, 태그를 모두 작성해야하는 사람에게 소리 질러도 좋습니다. 기본 XML 사양을 따라야합니다. – Nyerguds

2

귀하의 코드가 있어야한다 :

using (XmlWriter writer = XmlWriter.Create("filename.xml")) 
{ 
    writer.WriteStartElement("User"); 
    writer.WriteElementString("Username", inputUserName); 
    writer.WriteElementString("Email", inputEmail); 
    writer.WriteEndElement(); 
} 
당신이 한 번 이상이 더 많은 일을 할 경우

, 당신은 확장 메서드를 만들 수 있습니다

이렇게하면 예외가 발생할 경우 리소스 유출을 방지하고 적절한 방법으로 XmlReader를 만듭니다 (이후 .NE T 2.0).

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

트릭

는는 true XmlWriterSettings.Indent =을 설정하고 XmlWriter를에 추가했다.

편집 :

은 또한 당신은 또한 대신 XmlWriterSettings을 추가하는

w.Formatting = Formatting.Indented; 

를 사용할 수 있습니다.