2016-07-07 5 views
0

xml 문서를 HMTL에 구문 분석하는 중입니다. 관련 요소를 선택하는 중입니다. 문제는이 xml 문서에 이스케이프 처리 된 xml이 포함되어 있으며 출력물 중 일부를 구문 분석해야한다는 것입니다.xslt가 XML 내부에서 xml을 이스케이프 처리했습니다.

나는 의 내용을 검색하기 위해 disable-output-escaping="yes"을 사용하고 있지만 결과 xml이 내 xsl에서 다시 액세스 될 수있는 방법을 볼 수 없습니다. 난 당신이 documentid로 할 의도 정확히 무엇에 따라 <ApprovedData>

`<?xml version="1.0" encoding="utf-8"?> 
<Message><Method>OCESIIJS</Method> 
<ApprovedData>&lt;transfers&gt; 
    &lt;transfer action="approve"&gt; 
     &lt;amount&gt;0&lt;/amount&gt; 
     &lt;type&gt;Document&lt;/type&gt; 
     &lt;hostref&gt;0&lt;/hostref&gt; 
     &lt;cdnidfr&gt;0&lt;/cdnidfr&gt; 
     &lt;documentid&gt;zzzzyyyyxxxx;/documentid&gt; 
     &lt;signdocument&gt;true&lt;/signdocument&gt; 
    &lt;/transfer&gt; 
&lt;/transfers 
&gt; 
</ApprovedData> 
<Message> 
.....` 
+0

어떤 XSLT 프로세서를 사용합니까? 예를 들어 Saxon 9.7을 사용하면 XPath 3.0 기능 https://www.w3.org/TR/xpath-functions-30/#func-parse-xml에 액세스 할 수 있습니다. XSLT 프로세서에 따라 C# (예 : XslCompiledTransform) 또는 JScript (예 : MSXML)의 확장 함수를 작성할 수도 있습니다. –

+0

참고 : http://stackoverflow.com/a/29205050/3016153 –

+0

유효한 XML 인 경우 'sed'또는 유사한 것을 사용하여 간단하게 이스케이프 처리 할 수 ​​있습니다. –

답변

0

내부 <documentid> 요소를 참조하는 템플릿을 만들 수있는 방법

,이 또는 도움이되지 않을 수도 있습니다 :

<xsl:template match="Message"> 
    <xsl:variable name="documentid" select="./ApprovedData/text()" /> 
    <xsl:value-of select="substring-before(substring-after($documentid, 'documentid&gt;'), ';/documentid')" /> 
    </xsl:template> 

문서 ID 뒤에 &lt을 잘라낸 것처럼 보였으므로 문자열을 변경해야 할 수 있습니다.

관련 문제