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

如何获取XML中Email字段的wd:Descriptor属性值?

问题:无法获取XML中Email字段的wd:Descriptor属性值

我有一套简单的XML与XSL代码,目标是获取Email字段的wd:Descriptor属性值。尝试了@wd:Descriptor、@*:Descriptor、wd:Descriptor这几种写法,都未能成功获取对应值。

XML数据

<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/CR_Maggie_Test_Report">
    <wd:Report_Entry>
        <wd:Email_-_Work wd:Descriptor="joe.smith@conehealth.com">
            <wd:ID wd:type="WID">c636104f4cfe100595a3c923c2b40001</wd:ID>
        </wd:Email_-_Work>
        <wd:Other_IDs_group>
            <wd:Custom_ID>683241</wd:Custom_ID>
        </wd:Other_IDs_group>
    </wd:Report_Entry>
</wd:Report_Data>

XSL样式表代码

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:ws="urn:com.workday/workersync"
    xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:this="urn:this-stylesheet"
    xmlns:tdf="urn:com.workday/tdf"
    xmlns:wd="urn:com.workday.report/CR_Maggie_Test_Report"
    xmlns:etv="urn:com.workday/etv" xmlns:xtt="urn:com.workday/xtt"
    exclude-result-prefixes="xs" version="1.0">
    
    <xsl:output method="text"/>
    <xsl:variable name="lineFeed" select="'&#xD;&#xA;'"/>
    <xsl:variable name="Space50" select="'                                                    '"/>
    <xsl:variable name="Space100" select="concat($Space50,$Space50)"/>
    <xsl:template match="/">
        <File xtt:separator="&#xA;"> 
                  <xsl:for-each select="wd:Report_Data/wd:Report_Entry">
                        <Report_Entry>
                            <!--xsl:text>test</xsl:text--> 
                            <Email_Work>
                                <!--xsl:value-of select="@wd:Descriptor"/-->
                                <xsl:value-of select="substring(concat(@wd:Descriptor,$Space50),1,20)"/>
                             </Email_Work>  
                            <Custom_ID>
                                <xsl:text></xsl:text>
                                <xsl:value-of select="substring(concat(wd:Other_IDs_group/wd:Custom_ID,$Space50),1,10)"/>
                            </Custom_ID>  
            </Report_Entry>
                    <xsl:value-of select="$lineFeed"/>
        </xsl:for-each> 
                <xsl:value-of select="$lineFeed"/>
        </File> 
    </xsl:template>
</xsl:stylesheet>
解决方案

核心问题是XPath的上下文节点错误:你当前在wd:Report_Entry节点下直接使用@wd:Descriptor,但该属性并不属于wd:Report_Entry,而是属于它的子节点wd:Email_-_Work。

只需修改Email_Work节点内的xsl:value-of的XPath路径,指定到正确的子节点属性:

<Email_Work>
    <xsl:value-of select="substring(concat(wd:Email_-_Work/@wd:Descriptor,$Space50),1,20)"/>
</Email_Work>

修改后即可正确提取到joe.smith@conehealth.com这个属性值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:20:06