XML 속성에 줄 바꿈을 저장하는 방법은 무엇입니까?
텍스트가 아닌 일부 XML 속성에 줄 바꿈이 포함 된 콘텐츠를 저장해야합니다. XSLT 1.0 / ESXLT / XSLT 2.0에서 디코딩 할 수 있도록 메서드를 선택해야합니다.
가장 좋은 인코딩 방법은 무엇입니까?
몇 가지 아이디어를 제안 / 제공하십시오.
호환되는 DOM API에서는 수행 할 작업이 없습니다. 실제 개행 문자를 속성에 저장하기 만하면 API 가이를 자체적으로 올바르게 인코딩합니다 ( 표준 XML 사양, 섹션 5.2 참조 ).
당신이 당신의 자신의 인코딩 (예를 교체 할 경우 \n
와
속성 값을 저장하기 전에), API는 사용자의 입력을 인코딩합니다 다시 결과 

XML 파일입니다.
결론은 문자열 값이 그대로 저장된다는 것입니다. 당신은 당신이 넣은 것을 꺼내고 간섭 할 필요가 없습니다.
그러나 … 일부 구현은 규정을 준수하지 않습니다. 예를 들어, &
속성 값으로 문자를 인코딩 하지만 개행 문자 나 탭은 잊어 버립니다. 이것은 단순히 줄 바꿈을
미리 바꿀 수 없기 때문에 잃어버린 위치에 있습니다 .
이러한 구현은 다음과 같이 인코딩되지 않은 개행 문자를 저장합니다.
<xml attribute="line 1
line 2" />
이러한 문서를 구문 분석 할 때 속성의 문자 개행 문자는 단일 공백으로 정규화되어 (다시 한 번 사양에 따라) 손실됩니다.
이러한 구현에서는 속성에 줄 바꿈을 저장 (및 유지!)하는 것이 불가능합니다.
엔티티
를 사용하여 XML 속성에서 개행을 나타낼 수 있습니다 .
캐리지 리턴을 나타내는 데 사용할 수 있습니다. Windows 스타일 CRLF는
.
이것은 합법적 인 XML 구문입니다. 자세한 내용은 XML 사양 을 참조하세요.
대략적인 대답은 다음과 같습니다.
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("
", "\r").Replace("
", "\n").Replace("><",">\r \n<");
StreamWriter sDoc = new StreamWriter(@"Agenda.xml");
sDoc.Write(a);
sDoc.Flush();
sDoc.Dispose();
보시다시피 이것은 문자열입니다.
일부 상황에서 도움이 된 약간 다른 접근 방식
자리 표시 자 및 찾기 및 바꾸기.
구문 분석하기 전에 사용자 정의 줄 바꿈 마커 / 자리 표시자를 사용하면됩니다. 그런 다음 상황의 후반부에서 문자열을 \ n 또는 또는 # & 10; 또는 \ u2028 또는 다양한 줄 바꿈 문자가 있습니다. 처음에 데이터에서 자신의 자리 표시자를 설정 한 후 다시 찾아서 바꿉니다.
이것은 jQuery $ .parseXML ()과 같은 파서가 인코딩되지 않은 줄 바꿈을 제거 할 때 유용합니다. 예를 들어 {LBREAK}를 줄 바꿈 문자로 사용하고 원시 텍스트 동안 삽입하고 나중에 XML 객체로 구문 분석 한 후 대체 할 수 있습니다. String.replaceAll ()은 유용한 프로토 타입입니다.
따라서 jquery 및 replaceAll 프로토 타입을 사용한 대략적인 코드 개념 (이 코드를 테스트하지는 않았지만 개념을 보여줍니다) :
function onXMLHandleLineBreaks(_result){
var lineBreakCharacterThatGetsLost = ' ';
var lineBreakCharacterThatGetsLost = '
';
var rawXMLText = _result; // hold as text only until line breaks are ready
rawXMLText = String(rawXMLText).replaceAll(lineBreakCharacterThatGetsLost, '{mylinebreakmarker}'); // placemark the linebreaks with a regex find and replace proto
var xmlObj = $.parseXML(rawXML); // to xml obj
$(xmlObj).html( String(xmlObj.html()).replaceAll('{mylinebreakmarker}'), lineBreakCharacterThatWorks ); // add back in line breaks
console.log('xml with linebreaks that work: ' + xmlObj);
}
물론 데이터 상황에 맞게 작동하거나 작동하지 않는 줄 바꿈 문자를 조정할 수 있으며 작동하지 않는 줄 바꿈 문자 집합에 대한 루프에 넣고 반복하여 작업을 수행 할 수 있습니다. 전체 줄 바꿈 문자 집합.
참조 URL : https://stackoverflow.com/questions/2004386/how-to-save-newlines-in-xml-attribute
'development' 카테고리의 다른 글
NSURLConnection의 userAgent 변경 (0) | 2020.12.29 |
---|---|
자바 게터 및 세터 (0) | 2020.12.29 |
대기열을 사용하는 생산자 / 소비자 스레드 (0) | 2020.12.29 |
기본 클래스에서 공개적으로 상속하지만 파생 클래스에서 기본 클래스의 일부 공용 메서드를 개인으로 만드는 방법은 무엇입니까? (0) | 2020.12.29 |
오른쪽으로 떠있는 것과 왼쪽으로 떠있는 것 사이에 div를 중앙에 배치 (0) | 2020.12.29 |