2016-01-07 3 views
0

Я новичок в XLST, и у меня есть задание. Мне нужно отфильтровать XML-документ, чтобы были включены только те элементы, имена которых содержат букву «a».XSLT-фильтр XML-документы, содержащие определенную букву

Результат должен содержать имя элемента. К примеру:

Если у меня есть следующий XML:

<?xml-stylesheet href="monfichier.xsl" type="text/xsl" ?> 
    <a> 
    <ab x="x"><b>Test</b><a>z</a></ab> 
    <z x="x"><a>z</a></z> 
    </a> 

Результат должен быть:

<a> 
    <ab x="x"><a>z</a></ab> 
    </a> 

Как я могу это сделать? Я пытаюсь умножить способы получить хороший результат с name(.), функция contains, но это не работает.

Вы можете мне помочь?

ответ

1

вы можете начать с шаблона идентичности:

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

затем шаблон переопределение, который устраняет другие узлы, которые не содержат a

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

таким образом следующую таблицу стилей:

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

    <xsl:strip-space elements="*"/> 
    <xsl:output indent="yes" omit-xml-declaration="yes"/> 

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

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

</xsl:stylesheet> 
Смежные вопросы