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

请求实现:XML中缺失指定wd:Academic_Period的wd:Report_Entry时输出$0.00

嘿,我来帮你搞定这个XML处理的需求——要实现当XML中不存在描述包含“2020 Summer”的wd:Report_Entry节点时输出$0.00,这里有两种实用的解决方案,适配不同的处理场景:

方案1:使用XSLT(适合纯XML转换场景)

XSLT是处理XML转换的标准工具,我们可以通过条件判断来实现需求。下面是完整的XSLT代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="urn:com.workday.report/Financial_Aid_Award_Letter">
    <xsl:output method="text" encoding="UTF-8"/>

    <xsl:template match="/">
        <!-- 先判断是否存在目标学期的节点 -->
        <xsl:variable name="hasSummer2020" select="boolean(wd:Report_Data/wd:Report_Entry[wd:Academic_Period/@wd:Descriptor[contains(., '2020 Summer')]])"/>
        
        <xsl:choose>
            <xsl:when test="$hasSummer2020">
                <!-- 存在的话,提取金额并格式化为货币形式 -->
                <xsl:value-of select="concat('$', format-number(wd:Report_Data/wd:Report_Entry[wd:Academic_Period/@wd:Descriptor[contains(., '2020 Summer')]]/wd:Total_Financial_Aid, '0.00'))"/>
            </xsl:when>
            <xsl:otherwise>
                <!-- 不存在的话直接输出$0.00 -->
                <xsl:text>$0.00</xsl:text>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

代码细节说明

  • 必须声明和源XML一致的wd命名空间,不然会找不到对应的节点。
  • 用boolean()函数判断目标节点是否存在,逻辑清晰。
  • 当节点存在时,用format-number()把金额转为两位小数的格式,符合货币展示要求。

用这份XSLT处理你提供的示例XML时,因为存在2020 Summer的节点,会输出$170.00;如果删掉该节点,就会自动输出$0.00。

方案2:使用XPath+编程语言(适合开发场景)

如果你是在Python、Java这类编程语言里处理XML,可以结合XPath查询来实现。比如用Python的lxml库:

from lxml import etree

# 你的XML内容
xml_content = """<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/Financial_Aid_Award_Letter">
    <wd:Report_Entry>
        <wd:Academic_Period wd:Descriptor="2020 Summer (05/26/2020-08/12/2020)">
            <wd:ID wd:type="Academic_Period_ID">ACADEMIC_PERIOD_2020_Fall</wd:ID>
        </wd:Academic_Period>
        <wd:Total_Financial_Aid>170</wd:Total_Financial_Aid>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Academic_Period wd:Descriptor="2020 Spring (01/21/2020-05/18/2020)">
            <wd:ID wd:type="Academic_Period_ID">ACADEMIC_PERIOD_2020_Spring</wd:ID>
        </wd:Academic_Period>
        <wd:Total_Financial_Aid>265</wd:Total_Financial_Aid>
    </wd:Report_Entry>
    <wd:Report_Entry>
        <wd:Academic_Period wd:Descriptor="2020 Summer (05/26/2020-08/12/2020)">
            <wd:ID wd:type="Academic_Period_ID">ACADEMIC_PERIOD_2020_Summer</wd:ID>
        </wd:Academic_Period>
        <wd:Total_Financial_Aid>170</wd:Total_Financial_Aid>
    </wd:Report_Entry>
</wd:Report_Data>"""

# 解析XML
tree = etree.fromstring(xml_content.encode('utf-8'))
# 定义命名空间
ns = {'wd': 'urn:com.workday.report/Financial_Aid_Award_Letter'}

# 查询目标学期的金额
aid_amount = tree.xpath("wd:Report_Data/wd:Report_Entry[wd:Academic_Period/@wd:Descriptor[contains(., '2020 Summer')]]/wd:Total_Financial_Aid", namespaces=ns)

# 判断输出
if not aid_amount:
    print('$0.00')
else:
    # 格式化为两位小数的货币
    print(f'${float(aid_amount[0]):.2f}')

这个逻辑很简单:先通过XPath查询是否存在目标节点的金额,如果查询结果为空就输出$0.00,否则格式化输出金额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:02:30