2016-07-07 141 views
0

我在做一個xml到HMTL的xml文檔解析。我只是選擇了一些相關的元素。問題是這個xml文檔包含轉義的xml,我必須將其中一些解析到我的輸出中。xslt在xml中轉義xml

我使用disable-output-escaping="yes"來檢索<ApprovedData>的內容,但我看不到一種方式,可以從我的xsl再次訪問此結果xml。

我怎樣才能構建是指<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