2016-04-11 2 views
1

Я хочу простой XSLT, который будет только сохранить те элементы, которые содержат определенное регулярное выражение:XSLT удалить элементы, которые не соответствуют регулярному выражению

<example> 
    <abc>text</abc> 
    <bc>text</bc> 
    <ab>text</ab> 
</example> 

Я хочу такой же вывод XML, но только с элементами, которые содержат " а ":

<example> 
    <abc>text</abc> 
    <ab>text</ab> 
</example> 
+0

Где именно у вас возникают проблемы с этим? https://www.w3.org/TR/xpath-functions/#func-matches –

+0

Привет, я новичок в xslt, и мне просто нужен простой скрипт, который вернет тот же xml, но удалит все элементы, которые не совпадают регулярное выражение – bdanger

ответ

2

Начнем с идентичностью преобразования и добавить шаблон, который глушит элементы, имя которых не совпадает с регулярным выражением:

<?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" indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="*[not(matches(name(), 'a'))]"/> 

</xsl:stylesheet> 

Пояснение: По умолчанию преобразование идентичности скопирует все на вывод as-is. Переопределите это поведение по умолчанию, написав простой шаблон, который соответствует элементам без «a» в их имени и ничего не делает, тем самым предотвращая появление таких элементов в выходном документе.

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