xml - XSL 在调用模板时复制不需要的节点值
问题描述
我有这个 XML,我需要对所有节点应用 2 次转换。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<a> V1 </a>
<b> noo </b>
<a> v2</a>
<a> v3</a>
<b>noo</b>
<a> v4</a>
<a> v5</a>
<a> v6</a>
</root>
这两个转换必须按顺序产生:首先是所有“first_transformation”,然后是所有“second_transformaiton”。
我使用了这个 xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method='xml' version='1.0' encoding="UTF-8" indent="yes"/>
<xsl:template match="/*">
<xsl:apply-templates mode="t1"/>
<xsl:apply-templates mode="t2"/>
</xsl:template>
<xsl:template match="//a" mode="t1" >
<xsl:element name="first_transformation">
<xsl:value-of select="current()"/>
</xsl:element>
</xsl:template>
<xsl:template match="//a" mode="t2" >
<xsl:element name="second_transformation">
<xsl:value-of select="current()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
如您所见,我为每个转换使用两个模板,并将它们称为“主”模板。
我的输出是:
<?xml version="1.0" encoding="UTF-8"?>
<first_transformation> V1 </first_transformation>
noo
<first_transformation> v2</first_transformation>
<first_transformation> v3</first_transformation>
noo
<first_transformation> v4</first_transformation>
<first_transformation> v5</first_transformation>
<first_transformation> v6</first_transformation>
<second_transformation> V1 </second_transformation>
noo
<second_transformation> v2</second_transformation>
<second_transformation> v3</second_transformation>
noo
<second_transformation> v4</second_transformation>
<second_transformation> v5</second_transformation>
<second_transformation> v6</second_transformation>
如您所见,我从保持复制的 b 节点中获得了这些“noo”值。
你知道我怎样才能让它们从我的输出中消失吗?谢谢!
解决方案
内置模板规则text()
默认复制节点(链接):
任何元素的内置规则是处理其子元素和文本节点。
因此,您必须为每种模式覆盖此行为。
因此,将这两个模板添加到您的样式表中:
<xsl:template match="text()" mode="t1" />
<xsl:template match="text()" mode="t2" />
这将删除所有多余的“noo”text()
节点。
推荐阅读
- javascript - Docker run -p 3000-3000 不工作,我必须使用端口 32779
- python - 如何将没有一致模式的 JSON 对象从 S3 加载到 PySpark DataFrame
- python - 哪个点不是被调用的点
- firebase - Helper 方法需要很长时间才能从 Firebase 检索数据导致呈现错误
- javascript - 如何在运行时检查 B 类是否扩展了 A
- docker - Docker 在 OS X Symfony 上运行缓慢
- java - 从集合中获取对象
- mediawiki - 在 MediaWiki 上创建一个模板页面,将给定的参数替换为 iframe
- java - 有人可以解释 Hibernate 中的 orphanRemoval 吗?
- python - 在数据帧上应用过滤器函数