2014-01-02 2 views
0

У меня есть этот файл XML:XSL: Исключить элемент с Starts-с условием

<ID> 
    <T1> 
     <T2>XXXXX</T2> 
     <T2>XXXXX</T2> 
    </T1> 
    <T3> 
     <T4> 
     <TxId>AAAXXXXXXXXXXX</TxId> 
     </T4>  
     <T4> 
     <TxId>BBBXXXXXXXXXXX</TxId> 
     </T4>  
     <T4> 
     <TxId>BBXXXXXXXXXXX</TxId> 
     </T4> .... 

Мне нужно исключить T4 элемент, когда 3 первый символ из TXID = AAA

Я пробовал:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<!--Identity template, 
     provides default behavior that copies all content into the output --> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <!--More specific template for Node766 that provides custom behavior --> 
    <xsl:template match="T4"> 
     <xsl:copy> 
      <xsl:apply-templates select="TxId[not(starts-with(.,'AAA'))]"/> 
      </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

ответ

3

мне нужно исключить T4 элемент, когда 3 первый символ из TXID = AAA

Если вы хотите исключить определенные элементы <T4>, вы должны применить предикат при сопоставлении «T4» - не при выборе своих детей.


Например:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="T4[not(starts-with(TxId,'AAA'))]"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="T4"/> 

</xsl:stylesheet> 
+0

Не могли бы вы показать мне пример, пожалуйста? –

4

Вместо

<xsl:template match="T4"> 
    <xsl:copy> 
     <xsl:apply-templates select="TxId[not(starts-with(.,'AAA'))]"/> 
     </xsl:copy> 
</xsl:template> 

Вам нужно что-то вроде

<xsl:template match="T4[TxId[starts-with(.,'AAA')]]" priority="2"> 
</xsl:template> 

Другими словами, для любого T4 элемента, вы хотите, таблицы стилей использовать шаблон идентификации и py T4 рекурсивно, , если не соответствует этому второму шаблону. В последнем случае ничего не выводить (шаблон пуст).

Этот второй шаблон имеет более высокий приоритет по умолчанию, чем шаблон идентификации, из-за его шаблона соответствия; но мне нравится делать приоритет явным, поэтому мы можем легко увидеть, что второй шаблон предназначен для переопределения, когда он совпадает.

+0

Doh! Я действительно не должен публиковать, когда соседи шумно. Спасибо, что сделали это просто. –

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