XSL & XPath - выбор имени элемента для атрибута - PullRequest
0 голосов
/ 21 июля 2010

Возможно, у меня довольно специфический вопрос.

У меня есть пользователь, который вводит в форму некоторые критерии, а затем он строит XPath из их ввода.Допустим, их ввод создает следующее:

//*[@color='red']/@*

Что по сути означает, что они хотят видеть все атрибуты любого элемента с @color = red.

Я могу отобразить именно то, что просит выражениеfor (все атрибуты), но я хотел добавить информацию, которая могла бы быть полезной, например, имя элемента, к которому принадлежат атрибуты.

Один из вариантов - добавить в XPath и отобразить имя элемента: (более короткий способ создания этого выражения без использования | было бы неплохо знать .. поэтому, если у вас есть предложения, это было бы здорово!)

//*[@color='red']/@* | //*[@color='red']

Другой вариант (которыйЯ надеюсь, что это возможно), чтобы выбрать имя элемента, которому принадлежит атрибут, из шаблона без изменения выражения XPath (потому что я мог бы использовать это выражение в другом контексте без имени элемента).

I хочу иметь этот 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 ]

2 голосов
/ 21 июля 2010
<xsl:value-of select="name()"/>

просто возвращает имя атрибут, но мне нужно выбрать имя элемента атрибута.

Элемент, к которому принадлежит атрибут, считается его родителем, поэтому:

..

при выдаче с контекстным узлом, являющимся атрибутом, выбирается элемент, к которому принадлежит этот атрибут.

Чтобы найти имя этого элемента, просто используйте функцию XPath name():

name(..)

при выдаче с контекстным узлом, являющимся атрибутом, вычисляется строка, которая является именем элемента, который содержит этот атрибут.

1 голос
/ 21 июля 2010

Вам нужен только этот XPath:

name(..)

Это работает, если узел контекста является выбранным узлом атрибута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...