使用 XSL 从 CDATA 转换 XML [英] Transform XML from CDATA using XSL

查看:35
本文介绍了使用 XSL 从 CDATA 转换 XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个 XML 文档:

I have this XML document:

<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 &quot;A BANK&quot;</namekz>
                                      <name2>BB &quot;B BANK&quot;</nameru>
                                    </row>
                                    <row>
                                      <bic>ABNAKZKX</bic>
                                      <bcode>922</bcode>
                                      <name1>CC &quot;C BANK&quot;</namekz>
                                      <name2>DD &quot;D BANK&quot;</nameru>
                                    </row>
                                </rows>
                            </ConDic>]]></data>
        </wrapper>
    </return>
</ns0:getDataResponse>

我如何用 XSL 解析它以获取 CDATA 中的每一行以进行这种选择:

How I can parse it with XSL to get each rows in CDATA to make this kind of select:

<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 版本):

As suggested in a comment, I post a solution. The example use XSLT 3.0 with Saxon 9.5 (needs PE or EE version):

<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 &quot;A BANK&quot;</name1>
                                      <name2>BB &quot;B BANK&quot;</name2>
                                    </row>
                                    <row>
                                      <bic>ABNAKZKX</bic>
                                      <bcode>922</bcode>
                                      <name1>CC &quot;C BANK&quot;</name1>
                                      <name2>DD &quot;D BANK&quot;</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>

这篇关于使用 XSL 从 CDATA 转换 XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆