XSLT разбирает несколько строк - PullRequest
0 голосов
/ 28 октября 2009
<data>
<Attributes>
 <Attribute name='somethingelse' value='blah'/>
 <Attribute name='forms'>
    <List>
      <String>xform</String>
      <String>yform</String>
    </List>
  </Attribute>
</Attributes>
</data>

Я уже анализирую xslt на уровне атрибутов, поэтому я могу получить значение бла, просто выполнив <xsl:value-of select="Attribute[@name='somethingelse']/attribute::value"/>

как сделать выбор для форм с двумя строками xform и yform. Я хотел бы получить xform и yform в одной строке. Из другой ветки кто-то дал мне следующий код:

<xsl:template match="/">
  <xsl:for-each select="//String">
<xsl:value-of select="."/><xsl:if test="not(position() = last())">|</xsl:if>
  </xsl:for-each>
  </xsl:template>

Я не уверен, как все это собрать вместе. Моя цель - получить результат вроде:

бла, XForm | yform

Ответы [ 2 ]

1 голос
/ 28 октября 2009

Не уверен, правильно ли я понял ваш вопрос, но я думаю, это должно вывести то, что вы хотите:

<xsl:template match="/">
  <xsl:apply-templates select="//Attributes"/>
</xsl:template>

<xsl:template match="Attributes">
  <xsl:value-of select="Attribute[@name='somethingelse']/@value"/>
  <xsl:text>,</xsl:text>
  <xsl:for-each select="Attribute[@name='forms']/List/String">
    <xsl:value-of select="."/>
    <xsl:if test="position() != last()">|</xsl:if>
  </xsl:for-each>
</xsl:template>
0 голосов
/ 09 декабря 2011

Вы также можете назначить одну переменную следующим образом:

<xsl:variable name="strings">
    <xsl:value-of select="concat(String[1],String[2],String[3])" />
</xsl:variable>

Неважно, существует ли 3-я строка. Это своего рода хак, и я на самом деле жестко закодировал 10 это мой код, добавив «###» между каждым, чтобы я мог запустить «содержит ($ strings,« ### Ключевое слово »), который в основном проверяет, есть ли Строки начинаются с определенной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...