2009-10-01 1 views
7

다음과 같은 내용으로 된 문서를 다른 문서로 변환하려고합니다. 첫 번째 문서 에서처럼 CDATA를 그대로 두지 만, XSLT로 CDATA를 보존합니다.XML을 XSLT로 변환하고 CDATA (Ruby에서) 보존

초기 XML :

<node> 
    <subNode> 
     <![CDATA[ HI THERE ]]> 
    </subNode> 
    <subNode> 
     <![CDATA[ SOME TEXT ]]> 
    </subNode> 
</node> 

최종 XML : 나는 이런 식으로 뭔가를 시도했지만 운이, 모든 것이 뒤죽박죽 않겠다

<newDoc> 
    <data> 
     <text> 
      <![CDATA[ HI THERE ]]> 
     </text> 
     <text> 
      <![CDATA[ SOME TEXT ]]> 
     </text> 
    </data> 
</newDoc> 

:

<xsl:element name="subNode"> 
    <xsl:value-of select="." disable-output-escaping="yes"/> 
</xsl:element> 

모든 아이디어를 어떻게 CDATA를 보존하고 싶습니까?

감사합니다. 랜스

루비/노코 기리

업데이트를 사용하여 : 여기에 작동하는 무언가가있다. 내가 필요한 작동 CDATA, 모든 텍스트() 노드를 감싸는 것, 그것은 텍스트 내에서 HTML 태그를 유지합니다

<text disable-output-escaping="yes">&lt;![CDATA[</text> 
<value-of select="normalize-space(text())" disable-output-escaping="yes"/> 
<text disable-output-escaping="yes">]]&gt;</text> 

.

답변

5

일반 텍스트 노드와 혼합 된 CDATA 노드의 정확한 순서는 유지할 수 없습니다. 기껏해야, 당신은 xsl:output/@cdata-section-elements에서 해당 요소의 이름을 나열하여, CDATA로 출력에 특정 요소의 모든 내용을 강제 할 수

<xsl:output cdata-section-elements="text"/> 
+0

xslt를 수행하기 전에 루비와 정규 표현식을 사용하여 사전 처리해야합니까? 그걸 어떻게 또 할 수 있니? 변수 등을 사용하기 때문에 cdata-section-elements는 그것을 자르지 않습니다. 팁 주셔서 감사합니다. –

+0

CDATA가 절대적으로 필요한 경우에는 XSLT 이외의 것을 찾아야합니다. 그것이 필요하다고 생각하는 이유에 관해서는 매우 궁금합니다. XDM은 텍스트와 CDATA를 구분하지 않습니다. XML 처리 응용 프로그램은 다른 의미를 부여해서는 안되기 때문에 CDATA와 문자 이스케이프는 서로 바꾸어 쓸 수 있어야합니다. –

+0

이 데이터를 플래시에서 사용하고 있는데 CDATA/CDATA가없는 문제가 많이 있다고 들었습니다. 나는 아직 실제로 시도하지 않았다 : p –

3

내 자신의 질문에 대한 답변을 게시 죄송하지만 작동 뭔가를 발견 : 내가 필요한 것을 위해 일하는 모든 텍스트() CDATA 노드를 포장 할 것이다, 그것은 텍스트 내에서 HTML 태그를 유지합니다


<text disable-output-escaping="yes">&lt;![CDATA[</text> <value-of select="normalize-space(text())" disable-output-escaping="yes"/> <text disable-output-escaping="yes">]]&gt;</text> 

.

+0

출력에서 ​​CDATA 노드를 얻는 방법이라고 생각한다. (단,'text '()'에서']]'를 얻을 수있다. 확실히 당신이 기대하는대로해라.)하지만, 입력 CDATA 노드와 입력 텍스트 노드를 구별 할 수있는 방법이 아직 없기 때문에 이것이 처음에는 CDATA 노드를 보존 할 수있는 방법을 모르겠다. 그렇지 않으면, 어떻게 이것이'cdata-section-elements'와 다른지 보지 못합니다 ... –