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

XML文档按trans-unit节点是否包含target子节点拆分的恒等变换实现需求

XML文档按trans-unit节点是否包含target子节点拆分的恒等变换实现需求

嗨,看起来你需要把这份XML文档拆分成两个结果:一个只保留包含<target>子节点的<trans-unit>,另一个只保留没有<target>的。用XSLT就能轻松实现这个需求,而且是恒等变换——也就是保留原节点的所有属性和内容,只是过滤掉不符合条件的节点。

实现思路

核心是基于XSLT的恒等变换模板(默认复制所有节点、属性和文本),然后添加针对<trans-unit>节点的匹配规则,只保留符合条件的节点,其他的则跳过输出。


输出1:只保留包含<target>子节点的<trans-unit>

下面的XSLT会复制整个XML结构,但只保留带有<target>子节点的<trans-unit>:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 恒等变换模板:复制所有节点、属性和文本 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配trans-unit节点,仅当它包含target子节点时才处理 -->
    <xsl:template match="trans-unit[not(target)]"/>
</xsl:stylesheet>

解释:第二个模板会匹配没有<target>子节点的<trans-unit>,并且模板内容为空,意味着这些节点会被跳过,不输出到结果中。


输出2:只保留不包含<target>子节点的<trans-unit>

对应的,把匹配规则反过来即可:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 恒等变换模板 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配trans-unit节点,仅当它包含target子节点时跳过 -->
    <xsl:template match="trans-unit[target]"/>
</xsl:stylesheet>

解释:这个模板会匹配有<target>子节点的<trans-unit>,并跳过它们,最终结果只保留没有<target>的<trans-unit>。


备注:内容来源于stack exchange,提问作者RM_EM2LQyOngoArEZj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:25:32