Выбор узлов XSLT на основе подстроки имени элемента - PullRequest
1 голос
/ 17 июня 2009

Как я могу с помощью XSLT выбирать узлы на основе подстроки имени элемента узлов?

Например, рассмотрим XML:

<foo_bar>Keep this.
  <foo_who>Keep this, too.
    <fu_bar>Don't want this.</fu_bar>
  </foo_who>
</foo_bar>

Из которого я хочу вывести:

<foo_bar>Keep this.
  <foo_who>Keep this, too.
  </foo_who>
</foo_bar>

Здесь я хочу выбрать для обработки те узлы, имена которых соответствуют регулярному выражению типа "foo. *".

Я думаю, что мне нужно выражение атрибута соответствия шаблона XSLT или выражение атрибута выбора apply-templates, которое применяет регулярное выражение к имени элемента. Но, может быть, это невозможно сделать без какой-либо конструкции, такой как утверждение?

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 17 июня 2009

Вот некоторый XSL, который находит элементы, начинающиеся с «foo», чтобы вы начали. Я не думаю, что функциональность регулярных выражений была добавлена ​​до XSLT 2.0 на основе соответствия регулярных выражений в XSLT 2 .

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="*">
        <xsl:variable name="name" select="local-name()"/>
        <xsl:if test="starts-with($name, 'foo')">
            <xsl:copy>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Это дает этот вывод, который, кажется, имеет дополнительный перевод строки.

<foo_bar>Keep this.
  <foo_who>Keep this, too.

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