Как найти текст после закрытого элемента и удалить его - PullRequest
0 голосов
/ 25 июня 2018

Я хочу удалить элемент и текст, который находится после элемента.Пример:

 <p>life</p>$

В приведенном выше примере я хочу заменить

<p>&nbsp;</p>$ 

на "" (пусто) или просто удалить его.Есть предложения?

1 Ответ

0 голосов
/ 25 июня 2018

Чтобы удалить что-то из входного XML, вы должны написать пустой шаблон сопоставляя такие узлы. Остальное копируется с помощью шаблона идентификации .

А что касается вашей задачи, я сомневаюсь, хотите ли вы удалить все p элементов. Итак, в моем примере скрипта я написал пустой шаблон для p элементов с class="xx".

Чтобы удалить текстовый узел , следующий за ним ($ в вашем примере XML), вам также нужно написать пустой шаблон, соответствующий именно такому узлу:

  • текстовый узел,
  • с первым предшествующим братом с именем p и class="xx".

Так что скрипт может выглядеть так:

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

  <xsl:template match="p[@class='xx']"/>

  <xsl:template match="text()[preceding-sibling::*[1][self::p[@class='xx']]]"/>

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

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

<root>
  <h1>Title</h1>
  <p class="xx">life</p>$
  <p>is brutal</p>Xxx
  <p>and full of traps</p>Yyy
</root>

Это дает:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <h1>Title</h1>
  <p>is brutal</p>Xxx
  <p>and full of traps</p>Yyy
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...