我有这个
XML文档:
<ns0:getDataResponse xmlns:ns0="http://abc.com/"> <return> <wrapper> <data><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <ConDic> <dictionary>bank</dictionary> <rows> <row> <bic>ABKZKZKX</bic> <bcode>319</bcode> <name1>AA "A BANK"</namekz> <name2>BB "B BANK"</nameru> </row> <row> <bic>ABNAKZKX</bic> <bcode>922</bcode> <name1>CC "C BANK"</namekz> <name2>DD "D BANK"</nameru> </row> </rows> </ConDic>]]></data> </wrapper> </return> </ns0:getDataResponse>
我如何用XSL解析它以获得CDATA中的每一行来进行这种选择:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://abc.com/"> <xsl:output method="html" /> <xsl:template match="text()|@*"/> <xsl:template match="ns0:rows"> <select name="bank" id="bank" class="input" style="width: 370px;"> <xsl:for-each select="row"> <xsl:sort select="name1"/> <option value="{bic}"><xsl:value-of select="name1" /></option> </xsl:for-each> </select>
根据评论中的建议,我发布了一个解决方案.该示例使用XSLT 3.0与Saxon 9.5(需要PE或EE版本):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://abc.com/" xmlns:math="http://www.w3.org/2005/xpath-functions/math" exclude-result-prefixes="xs math ns0" version="3.0"> <xsl:output method="html" indent="yes"/> <xsl:template match="text()|@*"/> <xsl:template match="ns0:getDataResponse"> <select name="bank" id="bank" class="input" style="width: 370px;"> <xsl:for-each select="parse-xml(return/wrapper/data)//row"> <xsl:sort select="name1"/> <option value="{bic}"> <xsl:value-of select="name1"/> </option> </xsl:for-each> </select> </xsl:template> </xsl:stylesheet>
有了输入
<ns0:getDataResponse xmlns:ns0="http://abc.com/"> <return> <wrapper> <data><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <ConDic> <dictionary>bank</dictionary> <rows> <row> <bic>ABKZKZKX</bic> <bcode>319</bcode> <name1>AA "A BANK"</name1> <name2>BB "B BANK"</name2> </row> <row> <bic>ABNAKZKX</bic> <bcode>922</bcode> <name1>CC "C BANK"</name1> <name2>DD "D BANK"</name2> </row> </rows> </ConDic>]]></data> </wrapper> </return> </ns0:getDataResponse>
结果是
<select name="bank" id="bank" class="input" style="width: 370px;"> <option value="ABKZKZKX">AA "A BANK"</option> <option value="ABNAKZKX">CC "C BANK"</option></select>