Выбор конкретных элементов, которые содержат дополнительные атрибуты - PullRequest
0 голосов
/ 18 октября 2018

Я довольно новичок в XSLT, и мне было интересно, как я могу заменить некоторые элементы.По сути, я хотел бы заменить элементы BR , которые имеют дополнительные атрибуты, просто обычными BR .XML выглядит следующим образом:

<outer_element>
    <p>
        <font face="Arial">
            Invitations<br>
        </font>
        <font face="Arial">
            Charts<br>
        </font>
    </p>
    <span style="font-size:12pt;">
        <br clear="all" style="font-size:18pt;">
    </span>
<outer_element>

И ниже приведена часть XSL:

<xsl:template match="//outer_element">
    <xsl:element name="outer_element">
        <xsl:value-of select="."/>
    </xsl:element>
    <xsl:element name = "text">
        <xsl:value-of select="."/>
    </xsl:element>
</xsl:template>

Кроме того, я не знаю точно, является ли это решение XSLT 1.0 или XSLT 2.0, котороеЯ ищу.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Ваш ввод не является допустимым XML / XHTML.br s должны быть закрыты: <br/>.Кроме того, последний конечный тег также не является закрывающим тегом.Если вы не ожидаете действительный XHTML, взгляните на https://jsoup.org/ или http://www.html -tidy.org / .

Это не так: существует XSLTшаблон с именем идентификационное преобразование , который рекурсивно копирует входные данные на выход, но позволяет переопределить процесс копирования для каждого элемента, который вы хотите.

Базовый шаблон блокируется следующим образом.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Теперь добавьте шаблон для br, который копирует только элемент, а не атрибуты:

<xsl:template match="br">
 <xsl:copy/>
</xsl:template>

Это должно быть.

0 голосов
/ 19 октября 2018

Вы можете использовать этот простой шаблон:

<xsl:template match="br">
  <br/>
</xsl:template>

Полный шаблон:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="br">
    <br/>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...