2013-10-14 3 views
0

ок я пытаюсь напечатать каждый элемент под ancient_wonders/чудо, равное имени, но когда я делаю это:как я использую для-каждый в XSLT

<xsl:for-each select="ancient_wonders/wonder"> 
    <xsl:value-of select="./name"/> 
</xsl:for-each> 

это только печатает тэ первого элемента, равного имя. вот мой XML:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="02-03.xsl"?> 
<ancient_wonders> 
<wonder> 
    <location> 
     Rhodes, Greece 
    </location> 

    <name language="English"> 
     Christ of Brasil 
    </name> 
    <name language="English"> 
     Colossus of Rhodes 
    </name> 
    <name language="Chinese"> 
     Great Wall of China 
    </name> 
</wonder> 

может кто-нибудь объяснить мне, как это сделать.

+1

Неудивительно, что у вас есть только один элемент 'wonder'. Вы повторяете одно чудо и возвращаете первый элемент 'name' внутри него. Честно говоря, я нахожу 'for-each' контринтуитивным на декларативном языке XSLT. – toniedzwiedz

+0

@Tom спасибо, ваш комментарий помог много –

ответ

0

У вас только один wonder элемент в вашем XML, но несколько имя элементов. Вы xsl: for-each перебирает элементы , и так будет повторяться только один раз. Если вы хотите вывести Name элементы, перебрать эти ....

<xsl:for-each select="ancient_wonders/wonder/name"> 
    <xsl:value-of select="."/> 
</xsl:for-each> 

Или, может быть, если у вас есть более чем один удивительно, например, вы можете использовать вложенную XSL: для -ий

<xsl:for-each select="ancient_wonders/wonder"> 
    Location: <xsl:value-of select="location" /> 
    <xsl:for-each select="name"> 
     <xsl:value-of select="."/> 
    </xsl:for-each> 
</xsl:for-each> 
+0

ОК, что я понимаю сейчас. Я думал, что каждый из них работает по-другому. Спасибо за ваш ответ. но теперь я пытаюсь напечатать каждое имя с языком, равным английскому, и это не будет работать, это то, что я делаю: \t \t \t –

+0

не обращайте внимания на то, что я получил его, спасибо –

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