因此,如果我的xml看起来如下所示并且我在节点“FULLTIME”中,我怎么能告诉我我在EMPLOYEE而不是承包商?那么有一个我可以使用的函数会返回类似“ROOT / PERSON / EMPLOYEE”的东西,告诉我从FULLTIME节点开始,父节点是ROOT,PERSON和EMPLOYEE吗?我似乎找不到任何可以提供的东西。我是xslt的新手,所以我的无知可能是我无法找到我想要的东西的重要部分。
<ROOT>
<PERSON>
<EMPLOYEE>
<FULLTIME>
<NAME>Mike</NAME>
<LAST_NAME>Thompson</LAST_NAME>
<EMPLOYEE_ID>1</EMPLOYEE_ID>
</FULLTIME>
<PARTTIME />
</EMPLOYEE>
<CONTRACTOR>
<FULLTIME>
<NAME>Mike</NAME>
<LAST_NAME>Olsen</LAST_NAME>
<EMPLOYEE_ID>2</EMPLOYEE_ID>
</FULLTIME>
<PARTTIME />
</CONTRACTOR>
</PERSON>
</ROOT>
任何建议都将不胜感激!
- S
答案 0 :(得分:3)
您可以使用name()
XPath 1.0函数从EMPLOYEE
节点获取CONTRACTOR
或FULLTIME
(如果您正在使用命名空间,则可以local-name()
):
<xsl:value-of select="name(..)"/> <!-- Returns EMPLOYEE or CONTRACTOR -->
如果您想获得完整的绝对路径,例如/ROOT/PERSON/EMPLOYEE
,请使用以下配方:
<xsl:for-each select="ancestor::*">
<xsl:text>/</xsl:text>
<xsl:value-of select="name()"/>
</xsl:for-each>
答案 1 :(得分:1)
ancestor
轴可用于在树中“查找”。目前还不完全清楚你想做什么,但你可以测试EMPLOYEE是否是你的祖先:
<xsl:if test="ancestor::EMPLOYEE" >
...
</xsl:if>
答案 2 :(得分:1)
您可以匹配 EMPLOYEE / FULLTIME或CONTRACTOR / FULLTIME:
<xsl:template match="EMPLOYEE/FULLTIME">
...
</xsl:template>
<xsl:template match="CONTRACTOR/FULLTIME">
...
</xsl:template>
然后在每场比赛中,你可以与全职员工和承包商做不同的事情。
我认为,这是XSLT方式而不是其他编程语言的程序性思维。