2016-07-07 105 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