Чтение значения XML слева направо в столбце таблицы - PullRequest
1 голос
/ 12 декабря 2011

Привет. Я пытаюсь создать динамическую таблицу, которая может быть заполнена данными XML.В таблице две строки и три столбца.Первая строка должна быть "@ n1three", а вторая строка должна заполнять данные "@ n1three3".Внутри xml-тега n1third есть три значения для заполнения столбцов.Это может не всегда иметь место, это может быть только два, но три столбца должны остаться независимо от того, есть данные или нет.

Я могу получить данные для чтения, но никогда в неправильном формате.Ниже мой код для XML и HTML.Может кто-то пролить свет.Спасибо.

XML:

<numberNodes>
 <node pos="1">
  <n1first n1first="a1">
<n1second n1second="aa2">
   <n1third n1three = "aaa1" n1three3="23"/>
   <n1third n1three = "aaa2" n1three3="24"/>
   <n1third n1three = "aaa3" n1three3="25"/>
  </n1second>
   <n1second n1second="aa2">
   <n1third n1three = "aaa1" n1three3="23"/>
   <n1third n1three = "aaa2" n1three3="23"/>
   <n1third n1three = "aaa3" n1three3="23"/>
  </n1second>
 </n1first>
 </node>
</numberNodes>

HTML:

<table border="16" cellspacing="2">
 <xsl:for-each select="n1third">
<tr><td><xsl:value-of select="@n1three"/></td></tr>
  <tr>
   <td><xsl:value-of select="@n1three3"/></td>
  </tr>
 </xsl:for-each>
</table>

1 Ответ

0 голосов
/ 12 января 2012

Если вы не можете быть уверены, что у вас есть 3 n1 третьих входных значения, вам придется использовать рекурсию:

<table border="16" cellspacing="2">
  <tr>
    <xsl:call-template name="writeRow">
       <xsl:with-param name="input" select="n1third/@n1three"/>
       <xsl:with-param name="cellCount" select="3"/>
    </xsl:call-template>
  </tr>
  <tr>
    <xsl:call-template name="writeRow">
       <xsl:with-param name="input" select="n1third/@n1three3"/>
       <xsl:with-param name="cellCount" select="3"/>
    </xsl:call-template>
  </tr>
</table>

С writeRow, определенным следующим образом:

<xsl:template name="writeRow">
  <xsl:param name="input"/>
  <xsl:param name="cellCount"/>
  <td><xsl:value-of select="$input[1]"/></td>
  <xsl:if test="$cellCount &gt; 1">
    <xsl:call-template name="writeRow">
       <xsl:with-param name="input" select="$input[position() &gt; 1]"/>
       <xsl:with-param name="cellCount" select="$cellCount - 1"/>
    </xsl:call-template>
  </xsl:if>
</xsl:template>

(Внимание, могут содержать ошибки)

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