gpt4 book ai didi

xslt - Xpath 不适用于具有 xml 字符串的变量

转载 作者:行者123 更新时间:2023-12-03 15:49:31 25 4
gpt4 key购买 nike

我在编写 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 变量中看到两个 person 节点。

谁能帮助我,我在 xpath 中做错了什么?

编辑应用 Daniel 的解决方案后,上述 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>

最佳答案

你的问题在这里:

<xsl:variable name="person1" select="MSA1"/>

这导致 $person1 变量为空。为什么?

因为对表达式 MSA1 求值——当前节点没有任何名为“MSA1”的子节点,因此未选择任何内容。

解决方案:

将想要的字符串指定为字符串文字:

<xsl:variable name="person1" select="'MSA1'"/>

你的第二个问题:

Now, only issue remained is with accessing child nodes of person based on some condition.

使用:

boolean($peopleList[Profession/Role = 'Developer'])

$peopleList 中有一个节点时,它会产生 true(),这样它至少有一个 Profession/Role crand-字符串值为字符串 "Developer"

的 child

关于xslt - Xpath 不适用于具有 xml 字符串的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13835132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com