我或许有一个相当具体的问题。
我有一个用户将在表单上输入一些条件,然后根据他们的输入构建一个XPath。假设他们的输入创建了以下内容:
//*[@color='red']/@*
这实际上意味着他们希望使用@color = red来查看任何元素的所有属性。
我可以准确显示表达式要求的内容(所有属性),但我想添加可能有用的信息,例如属性所属的元素名称。
一个选项是添加到XPath以显示元素名称:(在不使用|的情况下创建此表达式的更短方法会很高兴知道..所以如果你有建议,那就会太棒了!)
//*[@color='red']/@* | //*[@color='red']
另一个选项(我希望是可能的)是从模板中选择属性所属的元素名称而不改变XPath表达式(因为我可能希望在没有元素名称的另一个上下文中使用此表达式)。
我 希望 拥有此XSLT:
<xsl:param name="built_expression" select="//*[@color='red']/@* />
<xsl:template match="/">
<html>
<body>
<table>
<tr>
<th>Element Name</th>
<th>Element Content</th>
</tr>
<xsl:apply-templates select="$built_expression"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="@*|node()">
<tr>
<td>
<xsl:value-of select="ELEMENT name()" />
</td>
<td>
<xsl:value-of select="node()" />
</td>
</tr>
... other display stuff to do with the attributes ...
</xsl:template>
这显然不起作用......但我希望你明白我的观点......
<xsl:value-of select="name()"/>
只返回属性的名称,但我需要选择属性元素的名称。
谢谢!如果我需要澄清任何事情,请告诉我!
答案 0 :(得分:2)
<xsl:value-of select="name()"/>
只返回名称 属性,但我需要选择 属性元素的名称。
属性所属的元素被视为其父元素,因此:
..
当上下文节点作为属性发出时,选择该属性所属的元素。
要查找此元素的名称,只需使用XPath name()
函数:
name(..)
发布时,作为属性的上下文节点求值为字符串,该字符串是包含该属性的元素的名称。
答案 1 :(得分:1)
你只需要这个XPath:
name(..)
如果上下文节点是您选择的属性节点,则此方法有效。