Xpath для каждого выбора - PullRequest
0 голосов
/ 03 мая 2018

У меня есть XML-файл следующей структуры

    <root>
      <Row>
         <KeyName>A</KeyName>
         .....
      </Row>
      <Row>
         <KeyName>B</KeyName>
         .....
      </Row>
      <Row>
         <KeyName>A</KeyName>
         .....
      </Row>
      <Row>
         <KeyName>B</KeyName>
         .....
      </Row>
      <Row>
         <KeyName>C</KeyName>
         .....
      </Row>
   </root>

Я хотел бы сделать заявление для преобразования xml-fo

Мне нужно сделать цикл по всем KeyNames, но каждое KeyName только один раз. Моя проблема в том, что я не знаю, какие KeyNames будут использоваться и как часто они появляются. Структура / глубина дерева постоянна.

Цель:

    Block KeyName/text()=A
     Row data
     Row data
     Row data 
     ..

    Block KeyName/text()=B
     Row data
     Row data
     ..

Продолжение для всех существующих (но неизвестных) KeyNames.

1 Ответ

0 голосов
/ 05 мая 2018

может быть, это поможет другим людям. После некоторого тестирования и дополнительных исследований я обнаружил процедуру, называемую «мюнхенская группировка». Я пробовал разные примеры, пока не нашел подходящий. Ниже вы найдете код для файла преобразования xslt, который ссылается на данные моего вопроса.

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

<xsl:key name="RowbyKeyName" match="Row" use="KeyName" />

<xsl:template match="root"> 
   <ul>
     <xsl:for-each select="Row[generate-id() = generate-id(key('RowbyKeyName', KeyName)[1])]" >
        <li> 
             KeyName: <xsl:value-of select="KeyName" /> 
             <ul> 
                      <xsl:for-each select="key('RowbyKeyName', KeyName)" >
                         <li>  
                             <xsl:value-of select="..." /> 
                             ....
                             Row Data
                             ....
                         </li>
                      </xsl:for-each> 
             </ul>
       </li> 
     </xsl:for-each> 
   </ul> 
</xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...