2017-02-06 7 views
-1

У меня есть XML, как это,XSLT - Выбор содержимого между двумя специальными символами

<doc> 
    <p>text1 &lt;xml version="1.0" encoding="UTF-16" 
     standalone="yes"?&gt; text2</p> 
</doc> 

Мне нужно удалить текстовое содержимое между &lt; and &gt; формой выше текста с использованием XSLT. Так ожидаемый выход,

<doc> 
    <p>text1 text2</p> 
</doc> 

Я пытался использовать регулярное выражение, но мне интересно, как я могу поймать текст между &lt; and &gt; формой регулярного выражения.

Любая идея, как я могу это сделать, используя XSLT?

ответ

1

Это должно работать.

(&lt;(?:.?\n?)*&gt;) 

Тогда Заменить "" (пусто)

Вход:

<doc> 
    <p>text1 &lt;xml version="1.0" encoding="UTF-16" 
     standalone="yes"?&gt; text2</p> 
</doc> 

Выход:

<doc> 
    <p>text1 text2</p> 
</doc> 

См: https://regex101.com/r/0o9hol/1

1

Используя только XSLT-1.0 может достигать Накануне этого, применяя следующий шаблон:

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

    <xsl:template match="p"> 
    <xsl:value-of select="concat(normalize-space(substring-before(text(), '&lt;')),' ',normalize-space(substring-after(text(), '&gt;')))" /> 
    </xsl:template> 

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

</xsl:stylesheet> 

Этот шаблон просто копирует все узлы с шаблоном в идентичности и применяет специальную обработку для всех <p> элементов.

Специальная обработка <p> узлов извлекает text() узлов, прежде чем &lt; и после &gt; в то время нормализации возникновение в space символов (уменьшая их количество к одному) и сцепляет результат.

Это все.

Смежные вопросы