如何获取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="'
'"/> <xsl:variable name="Space50" select="' '"/> <xsl:variable name="Space100" select="concat($Space50,$Space50)"/> <xsl:template match="/"> <File xtt:separator="
"> <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
相关产品推荐
相关产品推荐

