【发布时间】:2016-11-17 13:20:58
【问题描述】:
我有多个 XML 文件,其中包含更改跟踪属性或 .
目标:
- 如果 XML 文件包含元素
CT="ACCEPT",则接受/打印<atict:add>下的所有值并忽略<atict:del>值。 - 如果 XML 文件包含元素
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,我得到了元素标签。处理后我只需要相应标签内的值。
【问题讨论】: