2013-02-22 7 views
1

xmlTextWriter를 사용하여 XML을 만듭니다.xml에 '&'를 쓰려면?

writer.WriteStartElement("book"); 
writer.WriteAttributeString("author", "j.k.rowling"); 
writer.WriteAttributeString("year", "1990"); 
writer.WriteString("&"); 
writer.WriteEndElement(); 

는하지만 지금은 '&'를 작성하지만 XmlTextWriter에 자동으로 "& A"로이 일을 쓸 것입니다 필요; 이렇게 할 수있는 방법이 있습니까?

doc 파일을 읽음으로써 xml을 생성합니다. "-"다음에 xml로 "& ndash";라고 써야합니다. 쓰는 동안 "& amp"; ndash로 쓰여집니다.

예를 들어, 텍스트가 good-bad 인 노드를 작성하려는 경우 실제로는 <node>good&ndash;bad</node>과 같은 XML을 작성해야합니다. 이것은 내 프로젝트의 요구 사항입니다.

+0

왜 잘못된 XML을 작성해야합니까? – Quentin

+0

편집을 따르지 않을 것입니다. XML에 쓰려고하는 일반 텍스트 (인코딩되지 않은) 버전을 추가 할 수 있습니까? '& ndash'는 HTML 문자 엔티티이므로 XML 파일에서 필요하지 않습니다. – psubsee2003

+0

xmlwriter가 "&"(& amp;)와 같이 "-"예 (& ndash)를 수행해야하는 것과 마찬가지입니다. – Giri

답변

6

, 당신은 독립 & 문자를 가질 수 없습니다. 따라서 good&ndash;bad을 포함하는 XML 노드가 필요하면 good&amp;ndash;bad으로 인코딩해야합니다. 다른 유효한 XML이 아닌 다른 해결 방법은 없습니다. 작동하게하는 유일한 방법은 XML 파일을 원하는대로 일반 텍스트로 작성하는 것입니다.하지만 XML 파서가 올바른 XML이 아니므로 읽을 수는 없습니다. 여기

은 (당신이 언어를 지정하지 않은 그래서 나는 C#에서 당신을 보여주는하고 있지만, 자바는 비슷한 있어야한다) 내 제안 해결의 코드 예제 : 당신이 발견으로, 다른 옵션을

using(var sw = new StreamWriter(stream)) 
{ 
    // other code to write XML-like data 
    sw.WriteLine("<node>good&ndash;bad</node>"); 
    // other code to write XML-like data 
} 

XmlTextWriterWriteRaw() 메서드를 사용하여 (C#의 경우) 인코딩되지 않은 문자열을 작성하지만 완료되면 유효한 XML 파일이 될 수 없다는 사실을 변경하지 않습니다.

그러나 앞서 언급했듯이 &ndash은 유효한 XML 문자가 아니기 때문에 XML 파서로 읽으려는 시도는 실패합니다. 유효한 XML이 아니기 때문입니다.

&ndash;은 HTML 문자 엔티티이므로 일반적으로 XML로 이스케이프 처리하지 않아도됩니다.

XML 언어에서 &은 이스케이프 문자이므로 &amp;은 &의 적절한 문자열 표현입니다. & 문자가 특별한 의미를 가지고 있으며, 따라서 하나의 & 문자를 파서에 의해 잘못 해석 될 수 있기 때문에 그냥 & 문자를 사용할 수 없습니다/

당신은 ">는 <와 비슷한 동작을 볼 것이며, '문자.모두는 XML 언어 내에서 의미를 가지므로 문서의 텍스트로 표현해야합니다.

위키 피 디아 출신의 모든 캐릭터 엔티티에 대한 참조입니다. XML (and HTML)입니다. 각각은 항상 이스케이프 문자와 이름으로 표현됩니다 (&gt;, &lt;, &quot;, &apos;)

+0

고마워.하지만 writer.WriteRaw ("–"); 또한 일하고있다. – Giri

+0

@Giri 사실입니다 (하지만 C#을 사용하는 것은 확실하지 않습니다). 그러나 요점은 올바른 XML이 아니므로 표준 XML 파서가 작성중인 "XML"을 구문 분석하는 데 문제가 있다는 것입니다. – psubsee2003

+0

죄송합니다. 우리는 XML을 읽는 자체 파서를 작성하고 있습니다. – Giri

1

XML의 경우 &&amp;으로 이스케이프되어야합니다. & 문자는 엔티티 용으로 예약되어 있으므로 달리 허용되지 않습니다. 엔티티는 XML에서 특별한 의미로 문자를 이스케이프하는 데 사용됩니다.

XML을 읽는 또 다른 소프트웨어는 엔티티를 다시 디코딩해야합니다. &lt;<이고 &gt;> 또는 다른 예를 들어, HTML과 같은 XML을 기반으로하는 일부 다른 언어는 더 많은 것을 제공합니다.

-1

인코딩해야한다고 생각합니다. 그래서 같이 : 그것은 이스케이프 문자가 아닌 적절한 XML 파일에서

colTest = "&" 
writer.WriteEncodedText(colTest) 
+0

입니다.'WriteEncodedText()'는 (는)'XmlTextWriter'의 메소드가 아닙니다. HtmlTextWriter 클래스의 메서드입니다. – psubsee2003