모든 속성의 개행 문자를 대체 문자로 바꾸려면 XSLT (또는 무언가 - 아래 참조)가 필요합니다.XML 속성의 개행 문자를 XSLT로 바꾸기
모든 데이터를 특성으로 저장하고 새 줄을 사용하여 카디널리티를 표현하는 레거시 XML을 처리해야합니다. 예를 들어 : 그래서이 문제가되지 않습니다 내가합니다 (XML 사양에 따라) 자바에서 파일을 구문 분석 할 때이 새로운 라인은 공백으로 대체되고있다
<sample>
<p att="John
Paul
Ringo"></p>
</sample>
그러나 나는리스트로 처리하고자하고 특히 유용합니다.
내 '솔루션'은 XSLT를 사용하여 모든 속성의 모든 개행 문자를 다른 구분 기호로 대체하는 것이었지만 XSLT에 대한 지식은 전혀 없습니다. 지금까지 본 모든 예제는 매우 구체적이거나 속성 값 대신 노드 내용을 대체했습니다.
저는 XSLT 2.0의 replace()
으로 손을 씻었지만 모든 것을 정리하는 데 어려움을 겪고 있습니다.
XSLT가 올바른 해결책입니까? 아래의 XSLT로 :
샘플 XML에 적용
<xsl:template match="sample/*">
<xsl:for-each select="@*">
<xsl:value-of select="replace(current(), '\n', '|')"/>
</xsl:for-each>
</xsl:template>
다음 사용 색슨를 출력합니다
John Paul Ringo
분명히이 형식이 아닌 어떤 난 후 -이 replace()
실험 단지입니다 - 하지만 XSLT 처리가 완료 될 때까지 이미 정규화되었습니다. 그렇다면 Java 파서를 사용하여 이러한 값을 쓰기로 구문 분석하는 다른 방법이 있습니까? 지금까지 JAXB 만 사용했습니다.
필자는 고무 장갑을 착용하고 파싱하기 전에 XML 문자열에 더러운 정규식을 구현해야하는 매우 불쾌한 느낌을 가지고 있습니다. 불행히도 XML을 생성 할 수있는 권한이 없습니다. – nullPainter
사실, 그렇게 생각하기에는 너무 무섭습니다. – nullPainter
속성 값 내의 공백이 의미 상으로 중요하다면 XML을 다루지 않으므로 비 XML 도구를 사용해야합니다. [Per spec] (http://www.w3.org/TR/xml/#AVNormalize) 속성 값 내의 모든 개행은 파서가 공백으로 변환 할 수 있으며, 표시되는 값에 개행 문자가 필요한 경우 구문 분석 후 문자 참조 (' ')로 이스케이프 처리해야합니다. –