【发布时间】:2016-08-03 06:32:57
【问题描述】:
我有多个 XML 文件,其中包含更改跟踪属性 <atict:add> 或 <atict:del>。
目标:
- 如果 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>
<?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>
处理后输出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:add>1456790
</atict:add></PARA>
<?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:add>1456790
</atict:add></PARA>
如何在 XSLT 中添加带有 if 条件的 CT 以满足条件?
【问题讨论】:
-
add和del的两个模板匹配。对::ancestor@CT="ACCEPT/REJECT"进行测试以进一步匹配。 -
谢谢乔普,喜欢这样吗?
-
是的,虽然不完全是,但我想到了匹配
add而不是text(),当然还有 `test="::ancestor[@CT='ACCEPT']" 之类的, 最近没有做 XSLT - 顺便说一下,网上有很多关于 XSLT 的备忘单。
标签: xml xslt xsd xml-parsing xslt-2.0