我无法从我的 xml 中以 xsl 编码获取子循环中的根节点数据
Posted
技术标签:
【中文标题】我无法从我的 xml 中以 xsl 编码获取子循环中的根节点数据【英文标题】:I am not able to get the root node data in the child loop in xsl coding from my xml 【发布时间】:2021-02-16 08:16:30 【问题描述】:xsl编码中如何获取子循环中的根节点数据 您能否介绍一下如何在我的子循环中获取根节点数据。 或者还有其他方法可以做到这一点而不是下面;感谢你的帮助。 我的 XML
<wd:Report_Data xmlns:wd="urn:com.workday.report/INT_Outbound">
<wd:Report_Entry>
<wd:Employee_ID>12345</wd:Employee_ID>
<wd:LastName>Raj</wd:LastName>
<wd:FirstName>Kiran</wd:FirstName>
<wd:Dependents>
<wd:Dependent_ID>D1245</wd:Dependent_ID>
<wd:Dep_FirstName>Mahi</wd:Dep_FirstName>
<wd:Spouse_LastName>Raj</wd:Spouse_LastName>
</wd:Dependents>
<wd:Dependents>
<wd:Dependent_ID>D1256</wd:Dependent_ID>
<wd:Dep_FirstName>Praveen</wd:Dep_FirstName>
<wd:Spouse_LastName>Raj</wd:Spouse_LastName>
</wd:Dependents>
<wd:Benefits>
<wd:Coverage>EE + Family</wd:Coverage>
</wd:Benefits>
</wd:Report_Entry>
</wd:Report_Data>
我的 XSL 代码
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.workday.report/INT_Outbound" version="2.0">
<xsl:output method="text" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="NEWLINE" select="'
'"/>
<xsl:variable name="COMMA" select="','"/>
<xsl:template match="/">
<xsl:for-each select="wd:Report_Data/wd:Report_Entry/wd:Dependents">
<xsl:value-of select="concat(wd:Report_Data/wd:Employee_ID,$COMMA)"/>
<xsl:value-of select="concat(wd:Report_Data/wd:LastName,$COMMA)"/>
<xsl:value-of select="concat(wd:Report_Data/wd:FirstName,$COMMA)"/>
<xsl:value-of select="concat(wd:Dependent_ID,$COMMA)"/>
<xsl:value-of select="concat(wd:Spouse_LastName,$COMMA)"/>
<xsl:value-of select="wd:Dep_FirstName"/>
<xsl:value-of select="$NEWLINE"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
电流输出:
,,,D1245,Raj,Mahi
,,,D1256,Raj,Praveen
预期输出:
12345,Raj,Kiran,D1245,Raj,Mahi
12345,Raj,Kiran,D1246,Raj,Praveen
【问题讨论】:
【参考方案1】:您的上下文已经是wd:Report_Data/wd:Report_Entry/wd:Dependents
,因此您需要返回到wd:Report_Entry
(使用..
)来获取这些值。
更新的 XSLT...
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.workday.report/INT_Outbound" version="2.0">
<xsl:output method="text" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="NEWLINE" select="'
'"/>
<xsl:variable name="COMMA" select="','"/>
<xsl:template match="/">
<xsl:for-each select="wd:Report_Data/wd:Report_Entry/wd:Dependents">
<xsl:value-of select="concat(../wd:Employee_ID,$COMMA)"/>
<xsl:value-of select="concat(../wd:LastName,$COMMA)"/>
<xsl:value-of select="concat(../wd:FirstName,$COMMA)"/>
<xsl:value-of select="concat(wd:Dependent_ID,$COMMA)"/>
<xsl:value-of select="concat(wd:Spouse_LastName,$COMMA)"/>
<xsl:value-of select="wd:Dep_FirstName"/>
<xsl:value-of select="$NEWLINE"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
小提琴:http://xsltfiddle.liberty-development.net/6q1SDk2
【讨论】:
谢谢丹尼尔,你能帮我进行另一项改进吗 - 如何获得如下结果:12345,Raj,Kiran,,, 12345,Raj,Kiran,D1245,Raj,Mahi 12345,Raj, Kiran,D1246,Raj,Praveen 我能够完成两个 for 循环,但只是检查是否有更好的方法。以上是关于我无法从我的 xml 中以 xsl 编码获取子循环中的根节点数据的主要内容,如果未能解决你的问题,请参考以下文章