XSLT - проблема с foreach и увеличенным именем атрибута - PullRequest
1 голос
/ 20 января 2010

Я использую XSLT и хотел бы преобразовать это:

<attr>
    <header name="UpdateInformation1">
        <detail name="info">blah</detail>
    </header> 
    <header name="UpdateInformation2">
        <detail name="info">blah2</detail>
    </header> 
...other headers with different names...
</attr>

К этому:

<UpdateInformation>
   <info>blah</info>
</UpdateInformation>
<UpdateInformation>
   <info>blah2</info>
</UpdateInformation>
...

Я пытался сделать это, используя foreach, но у меня не было большого успеха. Вот то, что у меня сейчас есть, но подстановочные знаки не работают в контексте такого типа:

* НЕПРАВИЛЬНО *

<xsl:for-each select="attr/header[@name='UpdateInformation*']">
    <UpdateInformation>
    <Info>
          <xsl:value-of select="detail[@name='info']"/>
        </info>
    </UpdateInformation>
</xsl:for-each>

* НЕПРАВИЛЬНО *

Есть предложения? Спасибо!

Ответы [ 2 ]

4 голосов
/ 20 января 2010

Используйте что-то вроде этого:

<xsl:for-each select="attr/header[starts-with(@name, 'UpdateInformation')]">
    <UpdateInformation>
        <Info>
            <xsl:value-of select="detail[@name='info']"/>
        </info>
    </UpdateInformation>
</xsl:for-each>

РЕДАКТИРОВАНИЕ: Исправлено выражение XPath для комментариев (ниже).

2 голосов
/ 20 января 2010

Выполнение этого с элементом xsl:for-each:

<xsl:for-each select="header[starts-with(@name, 'UpdateInformation')]">
 <UpdateInformation>
  <Info>
   <xsl:value-of select="detail"/>
  </info>
 </UpdateInformation>
</xsl:for-each>

Использование xsl:template было бы лучшим способом сделать это в xslt, поскольку в этом его сила:

<xsl:template match="header[starts-with(@name, 'UpdateInformation')]">
 <UpdateInformation>
  <Info>
   <xsl:value-of select="detail"/>
  </info>
 </UpdateInformation>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...