2011-01-24 6 views
0

xsl 파일에 실제로 xml과 유사한 변수 (varXml)가 있습니다. <apps><det id="aaaa"><det key="name"><det id="12"/><tur key="34" id="00x"/></det></det></apps>.문자열 변수 (xml 형식)를 최종 xml의 일부로 변환합니다.

<xsl:element name="opersApps"> 
    <xsl:attribute name="sts">1</xsl:attribute> 
    <xsl:value-of select="$varXml"/> 
</xsl:element> 

을 그리고 그 결과는 다음과 같습니다 :

XSL 파일의 형식은 다음과 같습니다

<opersApps sts="1"> 

<apps><det id="aaaa"><det key="name"><det id="12"/><tur key="34" id="00x"/></det></det></apps>

</opersApps> 

지금 here 것 같습니다.

가운데 부분 (변수 varXml)은 xml을 보지 않습니다. 어떻게 XML에 통합 될 수 있습니까? I는 다음과 같이 할 :

<opersApps sts="1"> 
<apps> 
    <det id="aaaa"> 
     <det key="name"> 
      <det id="12"/> 
      <tur key="34" id="00x"/> 
     </det> 
    </det>   
</apps> 
</opersApps> 

감사합니다.

나중에 편집 : 는 varXml은 다음과 같습니다

String varXml ="<det id=\"aaaa\">\n" + 
       " <det key=\"name\">\n" + 
       "  <det id=\"12\"/>\n" + 
       "  <tur key=\"34\" id=\"00x\"/>\n" + 
       " </det>\n" + 
       "</det> "; 
+0

잘 형식화 된 xml입니다. 새 줄을 놓치 셨나요? –

+0

들여 쓰기를 제어 하시겠습니까? – ChrisJ

+0

@ChrisJ : 예! 나는 실제 결과와 링크를 맺었습니다. 이것은 내가 원하는 것처럼 보이지 않습니다. – Paul

답변

3

두 가지 접근 방법이 있습니다.

(a) XML 문자열을 트리로 구문 분석 한 다음 XSLT 명령어 (예 : xsl : copy-of)를 사용하여 트리로 조작하십시오. XSLT 내에서 XML 문자열을 구문 분석하는 표준 방법은 없지만 많은 제품에는 확장 프로그램 (예 : saxon : parse())이 있거나 사용자가 직접 작성할 수 있습니다.

(b) disable-output-escaping = "yes"를 사용하여 XML 문자열을 직렬화 된 출력으로 복사하십시오. 모든 환경에서 작동하지는 않습니다 - 기능을 지원하는 프로세서와 XSLT 프로세서의 직렬 변환기를 사용하는 환경에서 실행중인 사용자에 따라 다릅니다. 그러나 디스 에이블 출력 탈출이 정당화 될 수있는 몇 가지 유스 케이스 중 하나입니다.

+0

+1 당신의 지혜를 Stackoverflow에서 인정 받기! –

+0

감사합니다. 나는 다른 방식으로이 문제를 해결했다. - 트랜스포머 xsl 파일에서 재귀 적으로 선언하고 XML 형식으로 String 변수를 사용하지 않고. – Paul

2

이러한 변환은 순수 XSLT에 (. 버전 1.0 및 2.0)/XPath를 수 없습니다.

권장 사항 : XML 문서 또는 조각을 문자열로 표시하지 마십시오.이 경우 마크 업이 삭제되고 1 차원 텍스트로 병합됩니다. 경우

는 진짜 마크 업을 포함하는 변수의 값을 변경할 수 없습니다, 다음 하나는 문자열을 구문 분석하고 실제 XML 문서를 다시 반환하는, 확장 기능이 변수를 전달해야합니다.

또 다른 가능한 해결 방법은disable-output-escaping 속성을 사용하는 것이지만 모든 XSLT 프로세서에서 작동한다는 보장은 없으며 XSLT 아키텍처 모델을 위배합니다.

항상 DOE을 사용하지 않는 것이 좋습니다.

+0

Thaknks first. 나는 d.o.e로 시도했지만 일하지 않았습니다. 문자열을 xml doc로 파싱해야하는 확장 함수에 변수를 전달하는 방법은 무엇입니까? (soryy, 나는 xsl .. 사용에있어서 매우 새로운 편이다.) – Paul

+0

@Paul : 확장 기능을 작성해야한다. 이 작업을 수행하는 방법은 사용중인 XSLT 프로세서에 따라 다릅니다. XSLT 프로세서의 해당 설명서를 읽어야합니다. 또는 특정 XSLT 프로세서에 대한 확장 함수를 작성하는 방법에 대한 새로운 질문을하십시오. 표준 .NET XSLT 프로세서에서는이 작업을 수행하는 방법을 알고 있지만 다른 많은 XSLT 프로세서에서는 사용할 수 없습니다. –

관련 문제