2010-01-05 4 views
48

텍스트가 아닌 XML 속성에 줄 바꿈이 포함 된 내용을 저장해야합니다. XSLT 1.0/ESXLT/XSLT 2.0에서 디코딩 할 수 있도록 메서드를 선택해야합니다.XML 속성에 개행 문자를 저장하는 방법은 무엇입니까?

최상의 인코딩 방법은 무엇입니까?

아이디어를 제안하거나 알려주십시오.

+0

가능 중복 보는 바와 같이 : // 유래. com/questions/449627/are-line-breaks-in-xml-attribute-values-valid) –

+0

비슷한 질문에 대한 예제를 만들었습니다. http://stackoverflow.com/a/29782321/611007 – n611x007

+0

관련 내용 : https ://stackoverflow.com/questions/260436/ - 관련 : https://stackoverflow.com/questions/449627/ - 관련 : https://stackoverflow.com/questions/1289524/ – n611x007

답변

64

준수하는 DOM API에는 수행 할 필요가 없습니다. 실제 개행 문자를 속성에 저장하기 만하면 API가 자체적으로 올바르게 인코딩합니다 (Canonical XML spec, section 5.2 참조). 당신이 당신의 자신의 인코딩 (즉, 속성 값을 저장하기 전에 
\n 교체) 할 경우

는, API는 XML 파일에 
 결과, 귀하의 의견 다시를 인코딩합니다.

하단은 문자열 값이 그대로 저장됩니다. 당신은 당신이 끼워 넣은 것을 꺼내지 만 간섭 할 필요는 없습니다.

... 일부 구현은 준수하지 않습니다. 예를 들어 속성 ​​값에 & 문자를 인코딩하지만 줄 바꿈 문자 또는 탭은 잊어 버릴 수 있습니다. 이것은 간단히 newline을 
으로 바꿀 수 없기 때문에 당신을 잃어 버리게 만듭니다.

이러한 문서를 구문 분석시
<xml attribute="line 1 
line 2" /> 

는, 속성의 문자 줄 바꿈이 (사양에 따라, 다시) 하나의 공간으로 정규화 - 따라서 : 개행 문자를 저장합니다

이러한 구현은 다음과 같이 인코딩되지 않은 그들은 잃어버린다.

이러한 구현에서는 속성에 개행을 저장 (및 유지!) 할 수 없습니다.

+0

내가 만난 점 : XML은 유닉스 스타일의 개행 문자 (LF)를 사용합니다. 따라서 Windows 스타일의 개행 (CR + LF)을 저장하려면 속성에서 읽은 다음 개행을 변환하거나 개행을 이스케이프해야합니다. 출처 : http://www.w3schools.com/xml/xml_syntax.asp – Joe

+2

@Joe : XML에서 유닉스 스타일의 개행 문자를 사용하는 정보는 어디서 얻습니까? 내가 볼 수있는 한 [사양] (http://www.w3.org/TR/xml/)은이를 제한하지 않습니다. – Tomalak

+0

@Tomalak 해당 링크의 맨 아래로 스크롤하십시오. "XML Stores New Line as LF"라는 표제를 찾으십시오. 나는 C#의 XmlWriter와 타사 구성 요소 모두에서 CR 문자 (Unix와 같은 LF 만 남음)를 제거합니다. – Joe

37

&#10; 엔티티를 사용하여 XML 속성의 개행을 나타낼 수 있습니다. &#13;은 캐리지 리턴을 나타내는 데 사용할 수 있습니다. Windows 스타일 CRLF는 &#13;&#10;으로 표시 될 수 있습니다.

이것은 합법적 인 XML 구문입니다. 자세한 내용은 XML spec을 참조하십시오.

+0

유효한 XML 문자입니까 ?? –

+0

엔티티 대신 엔코딩을 사용해야합니다. getAttribute는 개행 문자가 포함 된 문자열로 작동하지 않습니다. 당신은 많은 생각을 가지고 있습니까? 엔터티가 getAttribute 문제를 해결할 것입니까? – Tommy

+0

@ Chathuranga Chandrasekara : 예. 유효한 XML입니다. 이 심볼이 언급 된 XML 스펙에 대한 링크를 포함하도록 내 대답을 업데이트했습니다. – Asaph

0

원유 대답은 할 수있다 :

XmlDocument xDoc = new XmlDocument(); 
xDoc.Load(@"Agenda.xml"); 
//make stuff with the xml 
//make attributes value = "\r\n" (you need both expressions to make a new line) 
string a = xDoc.InnerXml.Replace("&#xD;", "\r").Replace("&#xA;", "\n").Replace("><",">\r \n<"); 
StreamWriter sDoc = new StreamWriter(@"Agenda.xml"); 
sDoc.Write(a); 
sDoc.Flush(); 
sDoc.Dispose(); 

이 뜻을 그냥 문자열 [XML 속성에서 줄 바꿈이 유효한 값은?] (HTTP의

관련 문제