Как проверить, содержат только символы + пробел и `p` с помощью регулярных выражений - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу включить только символы + пробел и <p> узлы внутри <used>.

Ввод:

<root>
  <used><p>String 1</p></used>
  <used>string 2<p>string 3</p></used>
  <used>string 4</used>
  <used><image>aaa.jpg</image>para</used>

Вывод должен быть :

<ans>
  <abc>string 1</abc>
  <abc>string 4</abc>
</ans>

Пробный код:

<ans>
  <abc>
    <xsl:template match="root">
      <xsl:choose>
        <xsl: when test="getCode/matches(text(),'^[a-zA-Z0-9]+$')">
          <xsl:text>text()</xsl:text>
        </xsl:when>
      </xsl:choose>
    </xsl:template>
  </abc>
</ans>

Мой проверенный код не работает, как я ожидал. Как я могу это исправить? Спасибо. Я использую XSLT 2.0

1 Ответ

0 голосов
/ 10 апреля 2020

Вы можете использовать следующую таблицу стилей XSLT-2.0 для получения желаемого результата:

<?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"/>

    <!-- Handle the <root> element -->
    <xsl:template match="/root">
      <ans>
        <xsl:apply-templates select="used" />
      </ans>
    </xsl:template>

    <!-- Create <abc> elements for every matching element -->
    <xsl:template match="used[not(*) and matches(text(),'^[\sa-zA-Z0-9]+$')] | used[not(text()) and matches(p/text(),'^[\sa-zA-Z0-9]+$')]/p">
      <abc><xsl:copy-of select="text()" /></abc>
    </xsl:template>

    <!-- Remove all spurious text nodes -->
    <xsl:template match="text()" />

</xsl:stylesheet>

Его результат

<?xml version="1.0" encoding="UTF-8"?>
<ans>
   <abc>String 1</abc>
   <abc>string 4</abc>
</ans>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...