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

如何用XSLT 1.0从斜杠分隔的beneaddress2中提取对应字段值?

修改XSLT 1.0样式表实现按分隔符提取字段需求

问题背景

现有XSLT 1.0样式表无法正确拆分输入XML中beneaddress2字段的内容,该字段格式为国家/州/城市/邮编,需要提取对应字段到指定节点:

  • BeneficiaryCountry:提取第一个/之前的内容(如US)
  • BeneficiaryStateProvince:提取第一个/与第二个/之间的内容(如CA)
  • BeneficiaryCity:提取第二个/与第三个/之间的内容(如SAN FRANCISCO)
  • BeneficiaryPostalCode:提取第三个/之后的内容(如012345-657)

原有XSLT样式表

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
    <xsl:template match="/">
        <Retrieval>
            <xsl:for-each select="root/row">
                <Payment>
                    <BeneficiaryCity>
                        <xsl:value-of select="beneaddress2"/>
                    </BeneficiaryCity>
                    <BeneficiaryPostalCode>
                        <xsl:value-of select="beneaddress2"/>
                    </BeneficiaryPostalCode>
                    <BeneficiaryStateProvince>
                        <xsl:value-of select="substring-after(beneaddress2, '/')"/>
                    </BeneficiaryStateProvince>
                    <BeneficiaryCountry>
                        <xsl:value-of select="substring-before(beneaddress2, '/')"/>
                    </BeneficiaryCountry>
                    
                </Payment>
            </xsl:for-each>
        </Retrival> <!-- 注意此处原拼写错误:Retrival 应为 Retrieval -->
    </xsl:template>
</xsl:stylesheet>

输入XML

<?xml version="1.0" encoding="utf-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="OuribankMPH.xsd">
  <row>
    <beneaddress2>US/CA/SAN FRANCISCO/012345-657</beneaddress2>
  </row>
</root>

修改后的XSLT样式表

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
    
    <xsl:template match="/">
        <Retrieval>
            <xsl:for-each select="root/row">
                <Payment>
                    <!-- 提取国家:第一个/之前的内容 -->
                    <BeneficiaryCountry>
                        <xsl:value-of select="substring-before(beneaddress2, '/')"/>
                    </BeneficiaryCountry>
                    
                    <!-- 提取州:第一个/之后,第二个/之前的内容 -->
                    <BeneficiaryStateProvince>
                        <xsl:value-of select="substring-before(substring-after(beneaddress2, '/'), '/')"/>
                    </BeneficiaryStateProvince>
                    
                    <!-- 提取城市:第二个/之后,第三个/之前的内容 -->
                    <BeneficiaryCity>
                        <xsl:value-of select="substring-before(substring-after(substring-after(beneaddress2, '/'), '/'), '/')"/>
                    </BeneficiaryCity>
                    
                    <!-- 提取邮编:第三个/之后的内容 -->
                    <BeneficiaryPostalCode>
                        <xsl:value-of select="substring-after(substring-after(substring-after(beneaddress2, '/'), '/'), '/')"/>
                    </BeneficiaryPostalCode>
                </Payment>
            </xsl:for-each>
        </Retrieval> <!-- 修正原拼写错误:Retrival → Retrieval -->
    </xsl:template>
</xsl:stylesheet>

修改说明

  1. 修正根节点拼写错误:原样式表中</Retrival>拼写错误,改为正确的</Retrieval>,避免XML输出格式错误。
  2. 嵌套使用substring-before和substring-after:
    • 州字段:先通过substring-after获取第一个/后的内容,再用substring-before截取第二个/前的部分。
    • 城市字段:嵌套两次substring-after跳过前两个/,再用substring-before截取第三个/前的部分。
    • 邮编字段:嵌套三次substring-after跳过前三个/,直接获取剩余内容。
  3. 调整节点顺序:按需求逻辑排列节点,提升可读性。

输出结果

应用修改后的样式表后,输出XML如下:

<?xml version="1.0" encoding="utf-8"?>
<Retrieval>
  <Payment>
    <BeneficiaryCountry>US</BeneficiaryCountry>
    <BeneficiaryStateProvince>CA</BeneficiaryStateProvince>
    <BeneficiaryCity>SAN FRANCISCO</BeneficiaryCity>
    <BeneficiaryPostalCode>012345-657</BeneficiaryPostalCode>
  </Payment>
</Retrieval>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:16:17