如何按顺序使用两个模板转换XML? 例如,我有一个XML中包含字符串XML ,因此我需要将此字符串XML 转换为XML,之后我需要删除发票节点。
input.xml中
<?xml version="1.0" encoding="UTF-8"?>
<MT_STATEMENT_response >
<Statement_response>
<P_INVOICE>
<invoices>
<invoice>
<number>12345</number>
<status/>
</invoice>
<invoice>
<number>67890</number>
<status/>
</invoice>
</invoices>
</P_INVOICE>
</Statement_response>
</MT_STATEMENT_response>
transformer.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/*">
<xsl:variable name="t1">
<xsl:apply-templates select="Statement_response" />
</xsl:variable>
<xsl:apply-templates mode="pass2" select="ext:node-set($t1)/*" />
</xsl:template>
<xsl:template match="Statement_response">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="invoices" mode="pass2">
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
预期
<invoice>
<number>12345</number>
<status/>
</invoice>
<invoice>
<number>67890</number>
<status/>
</invoice>
答案 0 :(得分:0)
使用XSLT 3和parse-xml
函数(https://www.w3.org/TR/xpath-functions-31/#func-parse-xml),您可以使用
invoice
元素中原始输入中转义的P_INVOICE
个元素
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
exclude-result-prefixes="xs math"
version="3.0">
<xsl:template match="/">
<xsl:copy-of select="parse-xml(//P_INVOICE)//invoice"/>
</xsl:template>
</xsl:stylesheet>