Выберите элемент, где атрибут = "X" - PullRequest
0 голосов
/ 10 августа 2010

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

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="example3.xsl"?>
<pics>
    <page no="1">
      <pic>
       <td>
         <no src="http://www.templetons.com/brad/pq/playaphone.jpg" width="150" height="120">1</no>
       </td>       
      </pic>
      <pic>
       <td>
         <no src="http://motherjones.com/files/legacy/mojoblog/funny-cats-a10.jpg" width="150" height="120">4</no>
      </td>    
      </pic>
    </page>
    <page no="2">      
      <pic>
       <td>
         <no src="http://motherjones.com/files/legacy/mojoblog/funny-cats-a10.jpg" width="150" height="120">4</no>
      </td>    
      </pic>
      <pic>
       <td>
         <no src="http://www.templetons.com/brad/pq/playaphone.jpg" width="150" height="120">1</no>
       </td>       
      </pic>      
    </page>
</pics>

Я хочу, используя XSL-файл, выбрать только одну страницу. Эта страница дает мне оба:

<xsl:for-each select="pics/page/pic">
    <tr>
      <xsl:for-each select="td">
        <td><img>
          <xsl:attribute name="src">
            <xsl:value-of select="no//@src"/>
          </xsl:attribute>
          <xsl:attribute name="width">
            <xsl:value-of select="no//@width"/>
          </xsl:attribute>
          <xsl:attribute name="height">
            <xsl:value-of select="no//@height"/>
          </xsl:attribute>
        </img></td>
      </xsl:for-each>
    </tr>
  </xsl:for-each>

Где и как я могу фильтровать / выбирать илиобратиться к атрибуту no = "x"?

Спасибо, Асаф

Ответы [ 4 ]

1 голос
/ 11 августа 2010

Измените это :

<xsl:for-each select="pics/page/pic">                    
    <tr>                    
      <xsl:for-each select="td">                    
        <td><img>                    
          <xsl:attribute name="src">                    
            <xsl:value-of select="no//@src"/>                    
          </xsl:attribute>                    
          <xsl:attribute name="width">                    
            <xsl:value-of select="no//@width"/>                    
          </xsl:attribute>                    
          <xsl:attribute name="height">                    
            <xsl:value-of select="no//@height"/>                    
          </xsl:attribute>                    
        </img></td>                    
      </xsl:for-each>                    
    </tr>                    
  </xsl:for-each>     

на это :

<xsl:apply-templates select="pics/page/pic"/> 

и добавьте обработку в шаблон:

<xsl:template match="pic">
 <tr> 
   <xsl:for-each select="td"> 
    <td>
     <img src="{no/@src}" width="{no/@width}" height="{no/@height}"/> 
    <td> 
   </xsl:for-each> 
 </tr> 
</xsl:template>

Затем, чтобы исключить (отфильтровать) определенную картинку (скажем, 2-й), добавьте этот пустой шаблон:

<xsl:template match="pic[@no='2']"/>
1 голос
/ 10 августа 2010

вы можете фильтровать по атрибуту, используя [@att='val']:

<xsl:for-each select="pics/page[@no='1']/pic">
0 голосов
/ 10 августа 2010
<xsl:for-each select="pics/page[@no='x']/pic">
   <!-- do something -->
</xsl:for-each>
0 голосов
/ 10 августа 2010

Примерно так:

<xsl:for-each select="pics/page[1]/pic">

Должен выбрать первый.Если вы хотите выбрать тот, у которого нет = "1", вы можете сделать это:

<xsl:for-each select="pics/page[@no='1']/pic">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...