我有一个包含更改跟踪的XML。用条件更改XML中的跟踪
目标:如果XML文件包含元素CT="ACCEPT"
,则接受/打印所有使用<atict:add>
的标签并忽略<atict:del>
。如果XML文件使用元素CT="REJECT"
,则接受/打印所有使用<atict:del>
的标签并忽略<atict:accept>
。
但是,万一XML不包含任何CT元素,则其应该相应地(无论<atict:add>
和<atict:del>
存在。
我能够实现这个问题的第一部分,但不能插入ADD
和DEL
元素第二部分
示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<DM xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:atict="http://www.arbortext.com/namespace/atict" CT="ACCEPT">
<PARA>abcd <atict:del>efghi</atict:del><atict:add>1456790
</atict:add></PARA>
</DM>
XSLT 1.0:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:atict="http://www.arbortext.com/namespace/atict">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="atict:del[ancestor::DM/@CT='ACCEPT']"/>
<xsl:template match="atict:add[ancestor::DM/@CT='REJECT']"/>
<xsl:template match="atict:add">
<xsl:element name="ADD">
<xsl:value-of select='.'/>
</xsl:element>
</xsl:template>
<xsl:template match="atict:del">
<xsl:element name="DEL">
<xsl:value-of select='.'/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
问题是当CT元素存在时,我得到了ADD/DEL
元素。当结果XML中存在CT=ACCEPT
或CT=REJECT
元素时,我不需要ADD
,DEL
元素。
如果可能的话,你能帮我解决一下吗?
感谢您的帮助。
谢谢。有用! –