используя XSL Transform XML-данные и их дочерние элементы в табличном формате HTML - PullRequest
1 голос
/ 16 июня 2011

Это мой тестовый XML в этом XML, у меня есть дочерний элемент: INSTRUMENT и дочерний дочерний элемент: INSTRUMENT / эмитент и может быть так далее ... 5002199 10001 686184SE3

<INSTRUMENT>
    <type>FI</type>
    <issuer>
        <FICode>123456</FICode>
        <name>Test</name>
        <city>SF</city>
        <state>CA</state>
    </issuer>

    <issueDate>2011-06-22-05:00</issueDate>
    <maturityDate>2016-06-22-05:00</maturityDate>
    <firstCouponDate>2011-07-22-05:00</firstCouponDate>
    <lastCouponDate>2016-05-22-05:00</lastCouponDate>
    <couponRate>2.0</couponRate>

    <paymentFrequency>12</paymentFrequency>

    <callSchedule>
        <notice>15</notice>
        <timing>0</timing>
        <call id="1">
            <startDate>2011-12-22-05:00</startDate>
            <type>2</type>
            <freq>M</freq>
        </call>
    </callSchedule>
</INSTRUMENT>
<Commision>7.0</Commision>
<price>100.0</price>

Я хочу отобразить эти данные в табличной форме HTML, и во время выполнения элемент xml может быть любым, поэтому я не могу жестко закодировать имя элемента или подэлемента я пытался выполнить XSL

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

<xsl:template match="*">
    <table border="1" width="1000">
        <tr>
            <td class="section_head">Key</td>
            <td class="section_head">Value</td>
        </tr>
        <xsl:for-each select="*" >
            <tr>
                <td>
                    <xsl:value-of select="name(.)" />
                </td>
                <td>
                    <xsl:value-of select="." />
                </td>
            </tr>
        </xsl:for-each>
    </table>
</xsl:template>

Дочерний ИНСТРУМЕНТ HTM, эмитент и callSchedule идут в табличной форме Есть ли способ, которым я могу выполнить итерацию XSL для создания дочерней таблицы HTML для дочерних элементов XML?

ключ Значение Я БЫ 5002199 Код 10001 CUSIP 686184SE3 ПРИБОРОСТРОЕНИЕ FI 123456 Test SF CA 2011-06-22-05: 00 2016-06-22-05: 00 2011-07-22-05: 00 2016-05-22-05: 00 2.0 12 15 0 2011-12-22 -05: 00 100,0 2 М 2012-01-22-05: 00 100,0 2012-02-22-05: 00 100 Commision 7,0 цена 100,0 Alloc 100

1 Ответ

2 голосов
/ 17 июня 2011

Я не совсем уверен, что вы здесь после. Похоже, вы хотите преобразовать узлы в пары имя / значение и вложить html-таблицы в соответствии с иерархией XML. Вот немного рекурсии, которая решает проблему незнания имен узлов во время выполнения. Надеюсь, это поможет вам начать с этим. Если это не то, что вы ищете, вы можете использовать его для уточнения вашего вопроса:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="/">   
    <html>
      <table>
        <xsl:apply-templates/>
      </table>  
    </html> 
  </xsl:template>

  <xsl:template match="*[count(*) = 0]">   
    <tr>
      <td>
        <xsl:value-of select="name(.)" />
      </td>
      <td>
        <xsl:value-of select="." />
      </td>
    </tr>
  </xsl:template>

  <xsl:template match="*[count(*) > 0]">  
    <tr>
      <td>
        <xsl:value-of select="name(.)" />
      </td>
      <td>
        <table>
          <xsl:apply-templates/>             
        </table>
      </td>
    </tr>     
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...