You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XSLT根据XML节点属性值添加首尾注释?

如何用XSLT给指定属性值的XML节点添加首尾注释?

要实现给所有带id:num="A"属性的节点添加首尾注释,核心是在XSLT模板的match表达式里用XPath精准匹配目标节点,再在模板中输出注释和节点内容。

关键知识点

XPath中匹配带特定属性值的元素语法为:*[@前缀:属性名='目标值'],注意如果属性用了命名空间前缀(比如示例中的id:),必须在XSLT中声明对应的命名空间才能正确匹配。

完整XSLT示例

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:id="http://example.com/your-namespace-uri"> <!-- 替换为实际命名空间URI -->
    <!-- 身份模板:复制所有未被特殊模板匹配的节点/属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配所有带有id:num="A"属性的元素 -->
    <xsl:template match="*[@id:num='A']">
        <!-- 输出前置注释 -->
        <xsl:comment>comment</xsl:comment>
        <!-- 复制当前节点(包括属性和子节点) -->
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
        <!-- 输出后置注释 -->
        <xsl:comment>comment</xsl:comment>
    </xsl:template>
</xsl:stylesheet>

示例输入

<rootNode id:num="A">
  <childNode>内容</childNode>
</rootNode>
<otherNode id:num="B">
  <childNode>其他内容</childNode>
</otherNode>

示例输出

<!--comment--><rootNode id:num="A">
  <childNode>内容</childNode>
</rootNode><!--comment-->
<otherNode id:num="B">
  <childNode>其他内容</childNode>
</otherNode>

说明

  1. 命名空间声明:必须将xmlns:id="http://example.com/your-namespace-uri"替换为XML文档中id前缀对应的实际命名空间URI,否则无法匹配到id:num属性。
  2. 身份模板:确保XML中未匹配到目标条件的节点和属性都会被原样复制,不影响其他内容。
  3. 目标模板:专门匹配符合id:num="A"条件的元素,先输出前置注释,再复制节点本身及所有子内容,最后输出后置注释。

内容的提问来源于stack exchange,提问作者dina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:30:48