2016-09-13 2 views
0

У меня есть документ XML:Xsl создать две таблицы присоединиться встречное поле

<Cable>A030.000 </Cable> 
<Address> 
<ZIP>11411</ZIP> 
<City>A-City</City> 
<Street>B-Street</Steet> 
<Hause>8</Hause> 
<CableData> 
<Damping>0242</Damping> 
<DM-1>400</DM-1> 
<Length-1>0054</Length-1> 
<DM-2>400</DM-2> 
<Length-2>0041</Length-2> 
<DM-3>400</DM-3> 
<Length-3>0024</Length-3> 
</CableData> 
</Address> 
<Address> 
<ZIP>11511</ZIP> 
<City>A-City</City> 
<Street>B-Street</Steet> 
<Hause>10</Hause> 
<CableData> 
<Damping>0242</Damping> 
<DM-1>400</DM-1> 
<Length-1>0054</Length-1> 
</CableData> 
</Address> 

Здесь каждый адрес узла имеет дочерний узел CableData, который в свою очередь, имеет демпфирующие и до 5 пар DM-хх Длина-хх.

Я хочу достичь с помощью таблиц XSL 2, соединенных общим счетчиком строк. Первая таблица должна содержать адресную информацию, кроме CableData, тогда как другая должна отображать содержимое CableData для каждого адреса. Общие данные для таблиц указаны в первом столбце, номер строки i и который должен использоваться для объединения данных в обе таблицы.

1-й таблице:

<table> 
<tr> 
<th>Num</th> 
<th>Zip</th> 
<th>City</th> 
<th>City dstr</th> 
<th>Street</th> 
<th>Hause</th> 
<th>Hause Ltr</th> 
</tr> 
<tr> 
    <td>1</td> 
    <td>12345</td> 
    <td>A-City</td> 
    <td>North</td> 
    <td>B-Street</td> 
    <td>1</td> 
    <td>C</td> 
</tr> 
<tr> 
    <td>2</td> 
    <td>12345</td> 
    <td>A-City</td> 
    <td>North</td> 
    <td>B-Street</td> 
    <td>2</td> 
    <td>D</td> 
</tr> 
</table> 

2-й таблице

<table> 
<tr> 
    <th>Num</th> 
    <th>Damping</th> 
    <th>DM-1</th> 
<th>Length-1</th> 
<th>DM-2</th> 
<th>Length-2</th> 
<th>DM-3</th> 
<th>Length-3</th> 
<th>DM-4</th> 
<th>Length-4</th> 
<th>DM-5</th> 
<th>Length-5</th> 
</tr> 
<tr> 
<td>1</td> 
<td>0242</td> 
<td>400</td> 
<td>0054</td> 
<td>400</td> 
<td>0041</td> 
<td>400</td> 
<td>0024</td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
</tr> 
<tr> 
<td>2</td> 
<td>0242</td> 
<td>400</td> 
<td>0054</td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
<td></td> 
</tr> 
</table> 

Общая колонка в обеих таблицах является Num.

+0

Пожалуйста, a) разместите ** хорошо сформированный ** пример ввода XML и (b) объясните, где именно вы испытываете трудности с это. –

+0

@ uL1 Пожалуйста, не редактируйте код OP: вы не знаете, как он выглядит. –

ответ

0

СОВЕТ 1: Просьба предоставить полные и хорошо сформированные документы, такие как минимальный, полный и проверенный пример, например, @ michael.hor257k, упомянутый уже в комментариях.

HINT 2: Проверьте этот xml-запрос. Они недействительны. [Например: <street> закрыт </steet>]

ПОДСКАЗКА 3: Расскажите нам, где проблема. Если вы просто ищете кого-то, кто выполняет вашу работу, это неправильное место, чтобы спросить. Имейте это в виду.

Посмотрите:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:output encoding="UTF-8" method="html"/> 

    <xsl:template match="/"> 
     <xsl:call-template name="createAddressesTab"/> 
     <xsl:call-template name="createDampingTab"/> 
    </xsl:template> 

    <xsl:template name="createAddressesTab"> 
     <table> 
      <tr> 
       <th>Num</th> 
       <th>Zip</th> 
       <th>City</th> 
       <th>City dstr</th> 
       <th>Street</th> 
       <th>Hause</th> 
       <th>Hause Ltr</th> 
      </tr> 
      <xsl:for-each select="//Address"> 
       <tr> 
        <td><xsl:value-of select="position()"/></td> 
        <td><xsl:value-of select="ZIP"/></td> 
        <td><xsl:value-of select="City"/></td> 
        <td><!-- provide some xml for this tag --></td> 
        <td><xsl:value-of select="Street"/></td> 
        <td><xsl:value-of select="Hause"/></td> 
        <td><!-- provide some xml for this tag --></td> 
       </tr> 
      </xsl:for-each> 
     </table> 
    </xsl:template> 

    <xsl:template name="createDampingTab"> 
     <table> 
      <tr> 
       <th>Num</th> 
       <th>Damping</th> 
       <th>DM-1</th> 
       <th>Length-1</th> 
       <th>DM-2</th> 
       <th>Length-2</th> 
       <th>DM-3</th> 
       <th>Length-3</th> 
       <th>DM-4</th> 
       <th>Length-4</th> 
       <th>DM-5</th> 
       <th>Length-5</th> 
      </tr> 
      <xsl:for-each select="//Address"> 
       <tr> 
        <td><xsl:value-of select="position()"/></td> 
        <td><xsl:value-of select="CableData/Damping"/></td> 
        <td><xsl:value-of select="CableData/DM-1"/></td> 
        <td><xsl:value-of select="CableData/Length-1"/></td> 
        <td><xsl:value-of select="CableData/DM-2"/></td> 
        <td><xsl:value-of select="CableData/Length-2"/></td> 
        <td><xsl:value-of select="CableData/DM-3"/></td> 
        <td><xsl:value-of select="CableData/Length-3"/></td> 
        <td><xsl:value-of select="CableData/DM-4"/></td> 
        <td><xsl:value-of select="CableData/Length-4"/></td> 
        <td><xsl:value-of select="CableData/DM-5"/></td> 
        <td><xsl:value-of select="CableData/Length-5"/></td> 
       </tr> 
      </xsl:for-each> 
     </table> 
    </xsl:template> 

</xsl:stylesheet> 

Объяснение: Довольно прямо вперед для "продвинутых" один. Он полностью функциональен в XSLT 1.0. Вызов 2 именованных шаблонов, которые выполняют запрошенную работу.

Это делает работу. Пожалуйста, спросите через комментарий, если есть какие-либо проблемы.

+0

Это действительно работает. Большое спасибо ! –

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