xapthを書く際に問題に直面しています。問題を説明しましょう。
一部のxmlを変換するためにxsltを書いています。また、xslt は、1 つの 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 変数に 2 つの person ノードが表示されます。
xpathで何が間違っているのか、誰かが私を助けてくれますか?
編集 上記の xapth の問題は、ダニエルのソリューションを適用した後に解決されました。現在、残っている唯一の問題は、いくつかの条件に基づいて person の子ノードにアクセスすることです。
次のテストは機能しません。
<xsl:variable name="roleDev" select="'Developer'"/>
<xsl:when test="$peopleList/Profession/Role=$roleDev">
<xsl:value-of select="We have atleast one Developer"/>
</xsl:when>