xslt在xml中转义xml
问题描述:
我在做一个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><transfers>
<transfer action="approve">
<amount>0</amount>
<type>Document</type>
<hostref>0</hostref>
<cdnidfr>0</cdnidfr>
<documentid>zzzzyyyyxxxx;/documentid>
<signdocument>true</signdocument>
</transfer>
</transfers
>
</ApprovedData>
<Message>
.....`
答
根据您打算与documentid
到底该怎么做一个模板,这可能会或可能不会有所帮助:
<xsl:template match="Message">
<xsl:variable name="documentid" select="./ApprovedData/text()" />
<xsl:value-of select="substring-before(substring-after($documentid, 'documentid>'), ';/documentid')" />
</xsl:template>
您可能必须更改字符串,因为您似乎在文档ID后切断了<
。
您使用哪种XSLT处理器?以Saxon 9.7为例,您可以访问XPath 3.0函数https://www.w3.org/TR/xpath-functions-30/#func-parse-xml。根据您的XSLT处理器,您也可以使用C#(例如使用XslCompiledTransform)或JScript(例如使用MSXML)编写扩展函数。 –
请参阅:http://*.com/a/29205050/3016153 –
如果它是有效的XML,您可以简单地使用'sed'或类似的命令来避开它。 –