我有多个XML文件,其中包含更改跟踪属性或。
目标:
CT="ACCEPT"
,则接受/打印<atict:add>
下的所有值并忽略<atict:del>
值。 CT="REJECT"
,则接受/打印<atict:del>
的所有值并忽略<atict:accept>
值。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>
处理后所需的输出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 1456790 </PARA>
</DM>
XSLT:
<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:stylesheet>
使用我的XSLT,我得到了元素标签。处理后我只需要相应标签内的值。
答案 0 :(得分:1)
处理后我只需要相应标签内的值。
因为您的身份转换模板会再次复制该元素。
自己定义两个进一步的!模板:
<xsl:template match="atict:del">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="atict:add">
<xsl:apply-templates/>
</xsl:template>
根据模板的内部优先级,xslt处理器可以使用&#34;删除&#34; -templates或(新的)&#34;仅限内容&#34; -templates。