2011-12-14 3 views
1

XML:Таблицы стилей XSLT? Не знаете, как писать?

<tickets> 
    <request day="tue"> 
    <ticket> 
     <type>Tech Support</type> 
     <cust>9045</cust> 
     <status>pending</status> 
    <ticket> 
    <ticket> 
     <type>Account Support</type> 
     <cust>3344</cust> 
     <status>resolved</status> 
    <ticket> 
    </request> 
    <request day="wed"> 
    <ticket> 
     <type>Tech Support</type> 
     <cust>9944</cust> 
     <status>new</status> 
    <ticket> 
    <ticket> 
     <type>Billing</type> 
     <cust>3344</cust> 
     <status>pending</status> 
    <ticket> 
    </request> 
</tickets> 

Как написать выбери = «», чтобы соответствовать всем значениям элементов П, не повторяя (если есть наиболее чем 1 заказ)?

+0

Ваш конец теги должны быть gef

+0

Пожалуйста, покажите ваш желаемый результат. –

+1

Звучит как вопрос группировки (если я правильно понял) - в этом случае решение XSLT 2.0 намного проще, чем XSLT 1.0: вам нужно сказать, какую версию вы используете. –

ответ

0

Это то, что вам нужно?

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="text" encoding="UTF-8" indent="yes"/> 
    <xsl:key name="cust" match="/tickets/request/ticket/cust/text()" use="."/> 
    <xsl:template match="/"> 
     <xsl:for-each select="/tickets/request/ticket/cust/text()[generate-id()=generate-id(key('cust',.)[1])]"> 
      <xsl:value-of select="."/> 
      <xsl:text>&#10;</xsl:text> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
1

Как я пишу отборный = «», чтобы соответствовать всем значениям элементов П, не повторяющемуся (если есть наиболее чем 1 заказ)?

Вот полный, короткий и простой (не xsl:for-each и не длинные и нечитаемые линии) Muenchian grouping решение:

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

<xsl:key name="kCustByVal" match="cust" use="."/> 

<xsl:template match= 
    "cust 
    [generate-id() 
    = 
     generate-id(key('kCustByVal', .)[1]) 
    ] 
    "> 
    <xsl:value-of select="."/><xsl:text> </xsl:text> 
</xsl:template> 

<xsl:template match="text()"/> 
</xsl:stylesheet> 

, когда это преобразование применяется на прилагаемом документе XML (с были сделаны хорошо сформированными после многочисленных поправок):

<tickets> 
    <request day="tue"> 
     <ticket> 
      <type>Tech Support</type> 
      <cust>9045</cust> 
      <status>pending</status> 
     </ticket> 
     <ticket> 
      <type>Account Support</type> 
      <cust>3344</cust> 
      <status>resolved</status> 
     </ticket> 
    </request> 
    <request day="wed"> 
     <ticket> 
      <type>Tech Support</type> 
      <cust>9944</cust> 
      <status>new</status> 
     </ticket> 
     <ticket> 
      <type>Billing</type> 
      <cust>3344</cust> 
      <status>pending</status> 
     </ticket> 
    </request> 
</tickets> 

разыскиваемых, правильный результат получается:

9045 3344 9944 
Смежные вопросы