Получение таблицы в XML с тем же именем узла и значением свойства, как написать код для этого - PullRequest
0 голосов
/ 02 января 2019

Нужна помощь для написания XSL-кода для XML, который имеет такое же свойство / атрибут с тем же именем узла.

Я попробовал <xsl:for-each. Это помогает, но печатает первое значение только для каждой строки таблицы.

XML, который я получаю

<PLMXML>
  <Form>
    <TableRow id="id15" subType="new_part_no_row" tablePropertyName="new_part_no" index="0">    
      <ApplicationRef version="j8Tt$2HDltBKvA" label="j8Tt$2HDltBKvA" application="Teamcenter"/>  
      <TableColumn title="item_no" value="vbzvb"/>
    </TableRow>
    <TableRow id="id16" subType="new_part_no_row" tablePropertyName="new_part_no" index="1">
      <ApplicationRef version="j8Yt$2HDltBKvA" label="j8Yt$2HDltBKvA" application="Teamcenter"/>  
      <TableColumn title="item_no" value="vvb"/>  
    </TableRow>
  </Form>
</PLMXML>

Код XSL:

<table border="0" bordercolor="black" align="left" cellspacing="2" cellpadding="1" width="100%">
    <tr></tr>
</table>
<br/>

<table border="0" bordercolor="black" align="left" cellspacing="10" cellpadding="0" width="100%">
    <tr>
        <td>
            <strong>
                <font size="4">
                    <font color="#000080">TABLE PROP</font>
                </font>
            </strong>
        </td>
    </tr>
</table>

<table border="0" bordercolor="black" align="left" cellspacing="2" cellpadding="1" width="100%">
    <tr></tr>
</table>

<table border="1" bordercolor="black" align="left" cellspacing="2" cellpadding="1" width="50%" height="5%">

    <th>Item NO</th>
    <th>Desc</th>
    <xsl:for-each select="/plm:PLMXML/plm:Form/plm:TableRow">
        <tr>
            <td>
                <xsl:value-of select="/plm:PLMXML/plm:Form/plm:TableRow[@title='item_no' and @index=current()/@index]/@value"/>
            </td>
        </tr>
    </xsl:for-each>
</table>

Я хотел бы отобразить вывод, как показано ниже.

ITEM NO
vbzvb 
vvb

1 Ответ

0 голосов
/ 03 января 2019

В вашем xsl:for-each вы находитесь на элементе TableRow, что означает, что выражение xpath в вашем xsl:value-of может быть относительно этого. Но используя / в начале выражения, вы игнорируете текущий узел и вместо этого начинаете поиск с узла документа.

Вы можете просто сделать это, чтобы получить TableColumn для "item_no"

<xsl:value-of select="plm:TableColumn[@title='item_no']/@value"/>

Попробуйте этот XSLT (который вы можете увидеть в действии на http://xsltfiddle.liberty -development.net / jyH9rNx ). Обратите внимание, что вам придется изменить объявление пространства имен для plm, чтобы оно совпадало с тем, что есть в вашем реальном XML

.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:plm="plm.test">
  <xsl:output method="html" indent="yes"/>

  <xsl:template match="/">
    <table border="1" bordercolor="black" align="left" cellspacing="2" cellpadding="1" width="50%" height="5%">
      <tr>
        <th>Item NO</th>
        <th>Desc</th>
      </tr>
      <xsl:for-each select="/plm:PLMXML/plm:Form/plm:TableRow">
        <tr>
          <td>
            <xsl:value-of select="plm:TableColumn[@title='item_no']/@value"/>
          </td>
          <td>
            <xsl:value-of select="plm:TableColumn[@title='desc']/@value"/>
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...