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

编写XSLT实现XML转CSV:判断mast是否存在ispast为true的日期

XSLT 实现XML到CSV的转换:根据子节点值判断父节点输出字段

需求说明

遍历XML中的<mast>节点,检查其下属<dates>/<date>节点的<ispast>值:

  • 若任意一个<ispast>的内容为true,则该<mast>对应的CSV行中ispast字段为true
  • 若所有<ispast>的内容都是false,则ispast字段为false

示例XML输入

<inst >
    <mast id="1">
        <dates>
            <date>
                <filedate>2022</filedate>
                <ispast>false</ispast>
            </date>
            <date>
                <filedate>2023</filedate>
                <ispast>false</ispast>
            </date>
            <date>
                <filedate>2020</filedate>
                <ispast>true</ispast>
            </date>
        </dates>
    </mast>
    <mast id="2">
        <dates>
            <date>
                <filedate>2022</filedate>
                <ispast>false</ispast>
            </date>
            <date>
                <filedate>2023</filedate>
                <ispast>false</ispast>
            </date>
            <date>
                <filedate>2025</filedate>
                <ispast>false</ispast>
            </date>
        </dates>
    </mast>
</inst>

期望CSV输出

id,ispast
1,true
2,false

解决方案:XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="UTF-8" />
    
    <!-- 输出CSV表头 -->
    <xsl:template match="/">
        <xsl:text>id,ispast&#10;</xsl:text>
        <xsl:apply-templates select="inst/mast" />
    </xsl:template>
    
    <!-- 处理每个mast节点 -->
    <xsl:template match="mast">
        <!-- 获取id属性值 -->
        <xsl:value-of select="@id" />
        <xsl:text>,</xsl:text>
        <!-- 判断是否存在ispast为true的子节点 -->
        <xsl:choose>
            <xsl:when test="exists(dates/date/ispast[text()='true'])">
                <xsl:text>true</xsl:text>
            </xsl:when>
            <xsl:otherwise>
                <xsl:text>false</xsl:text>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:text>&#10;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

代码逻辑说明

  1. 输出设置:通过<xsl:output method="text" />指定输出为纯文本格式,匹配CSV的格式要求。
  2. 表头输出:根模板匹配后先输出CSV表头行,再遍历所有<inst>/<mast>节点。
  3. 节点处理:
    • 提取当前<mast>的id属性值并输出。
    • 使用exists(dates/date/ispast[text()='true'])检查当前节点下是否存在任意一个<ispast>内容为true的子节点,根据结果输出对应的true或false。
    • 每行末尾添加换行符&#10;保证CSV的行结构正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:20:30