基于同级元素属性匹配移除XML节点的XSLT技术求助
修正后的XSLT代码
核心思路是用**键(key)**快速匹配阀门的OBJ_ID,精准过滤掉关联到阀门的文本标签节点:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 定义键:用Absperrorgan的OBJ_ID作为索引,提升匹配效率 --> <xsl:key name="valveIds" match="Absperrorgan" use="@OBJ_ID"/> <!-- 标识模板:默认复制所有节点、属性和文本内容 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 匹配并过滤目标Leitungsknoten_Text节点 --> <xsl:template match="Leitungsknoten_Text[key('valveIds', LeitungsknotenRef/@REF)]"> <!-- 空模板:满足匹配条件时不输出该节点 --> </xsl:template> </xsl:stylesheet>
关键逻辑说明
<xsl:key>:提前将所有Absperrorgan节点的OBJ_ID存入索引,避免每次过滤都遍历全部阀门节点,大幅提升处理速度。- 过滤模板:当
Leitungsknoten_Text的LeitungsknotenRef/@REF能通过索引找到对应的阀门时,该模板生效,直接跳过该文本标签节点的输出。 - 标识模板确保其他所有节点(包括未关联阀门的
Leitungsknoten_Text)都被原样保留复制。
内容的提问来源于stack exchange,提问作者Pierre de la Verre
相关产品推荐
相关产品推荐

