我需要能够在xml中复制节点,但不能复制数据本身。
示例:
<Report>
<PaymentAccountInfo>
<AccountName>Demo Disbursement Account</AccountName>
</PaymentAccountInfo>
</Report>
这需要只是
<Report>
<PaymentAccountInfo>
<AcocuntName></AccountName>
</PaymentAccountInfo>
</Report>
谢谢!
答案 0 :(得分:0)
您可以尝试以下操作:
<?xml version='1.0'?>
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method="xml"
indent="yes" />
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="* | @*"/>
<!--
to also display text, change this line to
<xsl:apply-templates select="* | @* | text()"/>
-->
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name(.)}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
只是复制所有xml节点的常用方法。只有选择apply-templates为'node()'才
所以你当前的XSLT(或多或少)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates /></xsl:copy>
</xsl:template>
</xsl:stylesheet>
您需要添加其他模板以禁止AccountName
元素
<xsl:template match="AccountName/text()" />
这将产生所需的
<Report>
<PaymentAccountInfo>
<AccountName/>
</PaymentAccountInfo>
</Report>
如果要删除所有文本节点而不是仅删除AccountName
内的节点(这也会删除缩进,因为它会压缩只有空白的节点),只需使用{{1}而不是match="text()"
答案 2 :(得分:0)
这个修改过的身份变换会做你想要的。它有一个特殊的模板,用于AccountName
元素的唯一处理,它只输出元素的标记。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AccountName">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<?xml version="1.0" encoding="utf-8"?><Report>
<PaymentAccountInfo>
<AccountName/>
</PaymentAccountInfo>
</Report>
答案 3 :(得分:0)
如果您要从所有元素中删除文字内容,可以将node()
替换为*
来修改identity transform。
这也会删除注释和处理指令,所以:
comment()
和/或processing-instruction()
添加到*
(*|comment()|processing-instruction()
)或
<xsl:template match="text()"/>
。 示例:
XML输入
<Report>
<PaymentAccountInfo>
<AccountName>Demo Disbursement Account</AccountName>
</PaymentAccountInfo>
</Report>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="@*|*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML输出
<Report>
<PaymentAccountInfo>
<AccountName/>
</PaymentAccountInfo>
</Report>