【问题标题】:XSL & XPath - Select Element Name of AttributeXSL & XPath - 选择属性的元素名称
【发布时间】: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()"/>

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

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

【问题讨论】:

    标签: xslt xpath


    【解决方案1】:
    <xsl:value-of select="name()"/>
    

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

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

    ..

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

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

    name(..)

    当上下文节点作为一个属性发出时,计算结果为一个字符串,它是包含该属性的元素的名称。

    【讨论】:

      【解决方案2】:

      您只需要这个 XPath:

      name(..)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        • 2011-11-06
        • 2012-12-24
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 2012-07-19
        相关资源
        最近更新 更多