我正在研究XSLT地图,以生成源字段OUTPUT_XML中发送内容的目标结构。
这是我的源结构,有两行
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Customer xmlns:ns0="urn:customer">
<row>
<OUTPUT_XML><response><test>123</test></response></OUTPUT_XML>
</row>
<row>
<OUTPUT_XML><response><test>456</test></response></OUTPUT_XML>
</row>
</ns0:Customer>
XSLT代码
<?xml version='1.0' encoding='utf-8' ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="urn:customer" >
<xsl:template match="/">
<xsl:value-of select="ns0:Customer/row/OUTPUT_XML" disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
使用此代码,我总是得到第一条记录的输出,如下所示。
XSLT输出
<?xml version="1.0" encoding="utf-8"?>
<response>
<test>123</test>
</response>
请告知xslt代码填充多条记录。
预期输出
<?xml version="1.0" encoding="utf-8"?>
<response>
<test>123</test>
<test>456</test>
</response>
答案 0 :(得分:0)
将xsl更改为此...
<xsl:template match="/">
<xsl:apply-templates select="ns0:Customer/row/OUTPUT_XML"/>
</xsl:template>
<xsl:template match="OUTPUT_XML">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>
输出方法需要 text 才能使用,因为多行/ OUTPUT_XML
的结果不正确如果你想要xml,那么你需要在输出中包含一个根节点
<xsl:template match="/">
<e>
<xsl:apply-templates select="ns0:Customer/row/OUTPUT_XML"/>
</e>
</xsl:template>
<xsl:template match="OUTPUT_XML">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>
答案 1 :(得分:0)
以这种方式尝试:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="urn:customer"
exclude-result-prefixes="ns0">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/ns0:Customer">
<response>
<xsl:apply-templates/>
</response>
</xsl:template>
<xsl:template match="row">
<test>
<xsl:value-of select="OUTPUT_XML/response/test" />
</test>
</xsl:template>
</xsl:stylesheet>
或者,如果您愿意:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="urn:customer"
exclude-result-prefixes="ns0">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/ns0:Customer">
<response>
<xsl:for-each select="row">
<test>
<xsl:value-of select="OUTPUT_XML/response/test" />
</test>
</xsl:for-each>
</response>
</xsl:template>
</xsl:stylesheet>