XSL& XPath - 选择属性的元素名称

时间:2010-07-20 20:04:33

标签: xslt xpath

我或许有一个相当具体的问题。

我有一个用户将在表单上输入一些条件,然后根据他们的输入构建一个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()"/>

只返回属性的名称,但我需要选择属性元素的名称。

谢谢!如果我需要澄清任何事情,请告诉我!

2 个答案:

答案 0 :(得分:2)

<xsl:value-of select="name()"/>
     

只返回名称   属性,但我需要选择   属性元素的名称。

属性所属的元素被视为其父元素,因此:

..

当上下文节点作为属性发出时,选择该属性所属的元素。

要查找此元素的名称,只需使用XPath name()函数:

name(..)

发布时,作为属性的上下文节点求值为字符串,该字符串是包含该属性的元素的名称。

答案 1 :(得分:1)

你只需要这个XPath:

name(..)

如果上下文节点是您选择的属性节点,则此方法有效。