我对某些XSLT有点小问题。
我原来的XML看起来像这样:
<?xml version="1.0"?><rowset>
<row>
<trans_type>10</trans_type>
<creation_date>2011-06-07</creation_date>
<system_id>1039</system_id>
<transaction_set>
<transaction>
<trans_type>10</trans_type>
<client_id>977400</client_id>
<case_id>12881459</case_id>
<invoice_no>01/2011</invoice_no>
<payment_date>110606</payment_date>
<payment>710,08</payment>
<currency>EUR</currency>
<comment>
<record_type>612</record_type>
<comment_text>Asiakas maksoi lisäksi kesäkuun vuokran ajalle 1.6. - 15.6.2</comment_text>
</comment>
<comment>
<record_type>612</record_type>
<comment_text>011. Meillä saldo 0 €.</comment_text>
</comment>
</transaction>
</transaction_set>
<subtotal>
<trans_type>10</trans_type>
<count>25</count>
</subtotal>
</row>
</rowset>
我的XSLT看起来像这样:
<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<rowset>
<xsl:for-each select="rowset/row/transaction_set/transaction">
<row>
<xsl:copy-of select="../../trans_type"/>
<xsl:copy-of select="../../creation_date"/>
<xsl:copy-of select="../../subtotal"/>
<xsl:copy-of select="."/>
<xsl:copy-of select="./client_id"/>
<comment_text><xsl:for-each select="./comment"><xsl:value-of select="./comment_text"/></xsl:for-each></comment_text>
</row>
</xsl:for-each>
</rowset>
</xsl:template>
</xsl:stylesheet>
...我的输出如下:
<?xml version='1.0' ?>
<rowset>
<row>
<trans_type>10</trans_type>
<creation_date>2011-06-07</creation_date>
<subtotal>
<trans_type>10</trans_type>
<count>25</count>
</subtotal>
<transaction>
<trans_type>10</trans_type>
<client_id>977400</client_id> <!--need this gone-->
<case_id>12881459</case_id>
<invoice_no>01/2011</invoice_no>
<payment_date>110606</payment_date>
<payment>710,08</payment>
<currency>EUR</currency> <!--need this gone-->
<comment> <!--need this gone-->
<record_type>612</record_type>
<comment_text>Asiakas maksoi lisäksi kesäkuun vuokran ajalle 1.6. - 15.6.2</comment_text>
</comment>
<comment> <!--need this gone-->
<record_type>612</record_type>
<comment_text>011. Meillä saldo 0 €.</comment_text>
</comment>
</transaction>
<client_id>977400</client_id>
<comment_text>Asiakas maksoi lisäksi kesäkuun vuokran ajalle 1.6. - 15.6.2011. Meillä saldo 0 €.</comment_text>
</row>
</rowset>
我需要从输出\rowset\row\transaction\comment
,\rowset\row\transaction\client_id
和\rowset\row\transcation\currency
中删除以下标记。虽然我已经设法将XML扭曲到我想要的方式,但我似乎无法删除我不想要的节点。
在原始XML中,transaction
中可以有多个transaction_set
,每个transaction
可以包含多个comment
。我正在尝试连接我设法做的所有comment\comment_text
条记录,但我需要在输出XML中从comment
中删除这些\rowset\row\transaction
个标记。
也许我是以错误的方式解决这个问题,但我无法理解它。
答案 0 :(得分:2)
更简单的方法是采用身份转换(即只复制每个元素/属性的转换),然后为要省略的元素添加无操作匹配:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- add elements that you want to omit here -->
<xsl:template match="//client_id"/>
<xsl:template match="//comment"/>
...
</xsl:stylesheet>
请参阅此相关问题: