我在写 xapth 时遇到问题。让我解释一下这个问题。
我正在编写 xslt 来转换一些 xml。xslt 还将一个 xml 文件从磁盘加载到 xslt 变量中。
PeopleXml.xml:
<TestXml>
<People>
<Person id="MSA1" name="Sachin">
<Profession>
<Role>Developer</Role>
</Profession>
</Person>
<Person id="ZAG4" name="Rahul">
<Profession>
<Role>Tester</Role>
</Profession>
</Person>
</People>
</TestXml>
XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://MyNamespace"
version="2.0">
<xsl:variable name="PeopleXml" select ="document('PeopleXml.xml')"/>
<xsl:variable name="peopleList" select="$PeopleXml/TestXml/People/Person"/>
<xsl:variable name="person1" select="MSA1"/>
<xsl:variable name="person" select="$peopleList/Person[@id=$person1]/@name"/>
<xsl:template match="/">
<xsl:value-of select="$person"/>
</xsl:template>
</xsl:stylesheet>
问题:xpath "$peopleList/Person[@id=$person1]/@name" 没有返回任何内容。事实上, $peopleList/Person 也不起作用。但是,当我调试代码时,我可以在 $peopleList 变量中看到两个人员节点。
谁能帮助我,我在 xpath 中做错了什么?
编辑 应用丹尼尔的解决方案后,上面的 xapth 问题已得到解决。现在,唯一剩下的问题是根据某些条件访问人的子节点。
以下测试不起作用。
<xsl:variable name="roleDev" select="'Developer'"/>
<xsl:when test="$peopleList/Profession/Role=$roleDev">
<xsl:value-of select="We have atleast one Developer"/>
</xsl:when>