Копирование узлов XML с итерацией - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть вопрос о копировании некоторого xml с xslt.

У меня есть xml, который иногда содержит родительские узлы с итерацией.Они выглядят так:

<opdracht iteration="1">
         <a> 1 </a>
         <b> 1 </b>
</opdracht>
<opdracht iteration="2">
         <a> 1 </a>
         <b> 1 </b>
</opdracht>
<opdracht iteration="3">
         <a> 1 </a>
         <b> 1 </b>
</opdracht>

Если я выберу 3 элемента, xml создаст 3 повторяющихся узла.Но если я выберу 5 из 6 элементов, он сгенерирует 5 или 6 разных итераций XML.

Мне нужно создать XSLT, который позволит мне копировать эти родительские и дочерние итерированные узлы, пока они повторяются.И вывести их под тем же оригинальным именем.Итак:

<opdracht iteration="1"> Becomes <opdracht>
And
<opdracht iteration="2"> becomes also <opdracht>

И так далее ...

Как мне это сделать?

1 Ответ

0 голосов
/ 02 декабря 2011

Я не совсем понимаю вопрос, но я «думаю», что вы говорите, что хотите скопировать XML, но удалите атрибут @ iteration из элементов opdracht .

Если это так, вы можете сделать это с помощью простого расширения XSLT преобразование идентичности

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:template match="opdracht/@iteration" />

   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

Применительно к следующему XML

<root>
<opdracht iteration="1"> 
         <a> 1 </a> 
         <b> 1 </b> 
</opdracht> 
<opdracht iteration="2"> 
         <a> 1 </a> 
         <b> 1 </b> 
</opdracht> 
<opdracht iteration="3"> 
         <a> 1 </a> 
         <b> 1 </b> 
</opdracht> 
</root>

Выводится следующее:

<root>
  <opdracht>
    <a> 1 </a>
    <b> 1 </b>
  </opdracht>
  <opdracht>
    <a> 1 </a>
    <b> 1 </b>
  </opdracht>
  <opdracht>
    <a> 1 </a>
    <b> 1 </b>
  </opdracht>
</root>
...