【发布时间】:2011-03-18 15:48:48
【问题描述】:
也许我有一个相当具体的问题..
我有一个用户会在表单上输入一些标准,然后它会根据他们的输入构建一个 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()"/>
只是返回属性的名称,但我需要选择属性元素的名称。
谢谢!如果我需要澄清任何事情,请告诉我!
【问题讨论】: