2016-03-28 3 views
0
  <custom> 
      <section name="A"> 
      <element name="Folder">A11</element> 
      <element name="Name">Test1</element> 
      <element name="Result">Fail</element>     
      </section> 
      <section name="B"> 
      <element name="Folder">A11</element> 
      <element name="Name">Test2</element> 
      <element name="Result">Pass</element>    
      </section> 
      <section name="C"> 
      <element name="Folder">A12</element> 
      <element name="Name">Test3</element> 
      <element name="Result">Pass</element>     
      </section> 
      <section name="D"> 
      <element name="Folder">A13</element> 
      <element name="Name">Test4</element> 
      <element name="Result">Pass</element>     
      </section> 
      </custom> 
      <custom>    
      <section name="A"> 
      <element name="Folder">A12</element> 
      <element name="Name">Test1</element> 
      <element name="Result">Pass</element>     
      </section> 
      <section name="B"> 
      <element name="Folder">A12</element> 
      <element name="Name">Test2</element> 
      <element name="Result">Fail</element>     
      </section> 
      <section name="C"> 
      <element name="Folder">A11</element> 
      <element name="Name">Test3</element> 
      <element name="Result">Pass</element>  
      </section> 
      <section name="D"> 
      <element name="Folder">A13</element> 
      <element name="Name">Test4</element> 
      <element name="Result">Pass</element>     
      </section> 
      </custom> 

Группировка по папкам Раздел Имя в папке Все Elment Имянужно сгруппировать XML с именем папки, а затем по разделам

Э.Г.

A11 - название раздела = "A" - Папка, имя, Результат Значение

  • имя раздела = "B"
  • папки, имя, значение результата

A12 - название секции = "C" - Папка, имя, значение результата

A13 - раздел имени = "D" - Папка, имя, значение результата

--Same идет для каждого пользовательского ---

нужно привести ниже формата:

  <root> 
      <custom> 
      <Folder>A11 
      <section name>A 
      <element name="Folder">A11</element> 
      <element name="Name">Test1</element> 
      <element name="Result">Fail</element> 
      </section> 
      <section name="B"> 
      <element name="Folder">A11</element> 
      <element name="Name">Test2</element> 
      <element name="Result">Pass</element> 
      </section> 
      </Folder> 
      <Folder>A12 
      <section name>C 
      <element name="Folder">A12</element> 
      <element name="Name">Test3</element> 
      <element name="Result">Pass</element> 
      </section> 
      </Folder> 
      <Folder>A13 
      <section name="D"> 
      <element name="Folder">A13</element> 
      <element name="Name">Test4</element> 
      <element name="Result">Pass</element>  
      </section> 
      </Folder> 
      <custom> 
      <custom> 
      <Folder>A11 
      <section name>C 
      <element name="Folder">A11</element> 
      <element name="Name">Test3</element> 
      <element name="Result">Pass</element> 
      </section> 
      </Folder> 
      <Folder>A12 
      <section name>A 
      <element name="Folder">A12</element> 
      <element name="Name">Test1</element> 
      <element name="Result">Pass</element> 
      </section> 
      <section name>B 
      <element name="Folder">A12</element> 
      <element name="Name">Test2</element> 
      <element name="Result">Fail</element> 
      </section> 
      </Folder> 
      <Folder>A13 
      <section name="D"> 
      element name="Folder">A13</element> 
      <element name="Name">Test4</element> 
      <element name="Result">Pass</element> 
      </section> 
      </Folder> 
      <custom> 
      </root> 
+0

Добро пожаловать в SO. Вам нужно показать, что вы уже пробовали, это не сайт «дайте мне код». – kebs

+0

«XML», который вы показываете, не имеет корректной формы: '<1/2/3/image1.jpeg>' не соответствует синтаксису XML. Прежде чем вы сможете обрабатывать все, используя XSLT, он должен быть хорошо сформированным XML. –

+0

Можете ли вы показать вывод, за исключением XML (или HTML). Спасибо –

ответ

0

Вы должны первыми начать с XSLT Identity Template, копия всех узлов из входного документа

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

Но тогда вы можете добавить шаблон, чтобы соответствовать custom, который затем можно использовать для группировки элементов section. В XSLT 2.0, то вы можете использовать для этого xsl:for-each-group

<xsl:for-each-group select="section" group-by="element[@name='Folder']"> 

Внутри этого, она является относительно прямой вперед, чтобы создать новый элемент folder и скопировать через существующие section элементов в этом.

<folder name="{current-grouping-key()}"> 
    <xsl:apply-templates select="current-group()" /> 
    </folder> 

Попробуйте этот XSLT. Обратите внимание, что это не даст вам XML, который вы указали в своем вопросе, поскольку XML, который вы показали, плохо сформирован (недействителен), но он должен дать вам общую идею.

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

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

    <xsl:template match="custom"> 
    <xsl:for-each-group select="section" group-by="element[@name='Folder']"> 
     <folder name="{current-grouping-key()}"> 
     <xsl:apply-templates select="current-group()" /> 
     </folder> 
    </xsl:for-each-group> 
    </xsl:template> 

    <xsl:template match="element[@name='Folder']" /> 
</xsl:stylesheet> 
+0

спасибо. Ошибка ниже: XslTransformException --------------------- «для каждой группы» не является признанным элементом расширения. – user6125167

+0

Вы отметили это как XSLT 2.0, но действительно ли вы используете процессор, поддерживающий XSLT 2.0? Какой процессор вы используете для преобразования? –

+0

Как получить детали процессора? XSL-заголовок: \t \t \t \t user6125167