2014-12-17 2 views
1

Я отправил свой XML-источник XML и целевой XML, и мне нужна помощь в его преобразовании с использованием XSLT. Я пытаюсь разделить исходную XML-коллекцию на разные целевые XML-документы. Мне нужно будет передать номер итерации во время выполнения в XSLT.Преобразование Vary XSLT для каждого итерационного номера параметра ввода

Источник XML:


<sou:rElement xmlns:sou="source.sample.com"> 
<sou:Header> 
    <sou:Elem1>SampleElementHeader</sou:Elem1> 
</sou:Header> 
<sou:Body> 
    <sou:Elem2> 
     <sou:Elem3> 
      <sou:ElemCollection> 
      <sou:Elements> 
        <sou:data>SomeData</sou:data> 
      </sou:Elements> 
      <sou:Elements> 
        <sou:data>SomeData1</sou:data> 
      </sou:Elements> 
      <sou:Elements> 
        <sou:data>SomeData2</sou:data> 
      </sou:Elements> 
      <sou:Elements> 
        <sou:data>SomeData3</sou:data> 
      </sou:Elements> 
      </sou:ElemCollection> 
     </sou:Elem3> 
    </sou:Elem2> 
</sou:Body> 
</sou:rElement> 

Target XML:


First Iteration: 

<sou:rElement xmlns:sou="source.sample.com"> 
<sou:Body> 
    <sou:Elem2> 
     <sou:Elem3> 
      <sou:ElemCollection> 
      <sou:Elements> 
        <sou:data>SomeData</sou:data> 
      </sou:Elements> 
      </sou:ElemCollection> 
     <sou:Elem3> 
    <sou:Elem2> 
</sou:Body> 
</sou:rElement> 

Second Iteration: 

<sou:rElement xmlns:sou="source.sample.com"> 
<sou:Body> 
    <sou:Elem2> 
     <sou:Elem3> 
      <sou:ElemCollection> 
      <sou:Elements> 
        <sou:data>SomeData1</sou:data> 
      </sou:Elements> 
      </sou:ElemCollection> 
     <sou:Elem3> 
    <sou:Elem2> 
</sou:Body> 
</sou:rElement> 

Third Iteration: 

<sou:rElement xmlns:sou="source.sample.com"> 
<sou:Body> 
    <sou:Elem2> 
     <sou:Elem3> 
      <sou:ElemCollection> 
      <sou:Elements> 
        <sou:data>SomeData2</sou:data> 
      </sou:Elements> 
      </sou:ElemCollection> 
     <sou:Elem3> 
    <sou:Elem2> 
</sou:Body> 
</sou:rElement> 

Fourth Iteration: 

<sou:rElement xmlns:sou="source.sample.com"> 
<sou:Body> 
    <sou:Elem2> 
     <sou:Elem3> 
      <sou:ElemCollection> 
      <sou:Elements> 
        <sou:data>SomeData3</sou:data> 
      </sou:Elements> 
      </sou:ElemCollection> 
     <sou:Elem3> 
    <sou:Elem2> 
</sou:Body> 
</sou:rElement> 

+2

Не могли бы вы разместить XSLT, который вы попробовали. –

ответ

0

Следующая XSLT:

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

    <xsl:param name="iteration" select="1"/> 

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

    <xsl:template match="sou:Header"/> 

    <xsl:template match="sou:Elements"> 
    <xsl:if test="count(preceding-sibling::sou:Elements) + 1 = $iteration"> 
     <xsl:copy> 
     <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

Применительно к следующему входного документа XML:

<?xml version="1.0" encoding="UTF-8"?> 
<sou:rElement xmlns:sou="source.sample.com"> 
    <sou:Header> 
    <sou:Elem1>SampleElementHeader</sou:Elem1> 
    </sou:Header> 
    <sou:Body> 
    <sou:Elem2> 
     <sou:Elem3> 
     <sou:ElemCollection> 
      <sou:Elements> 
      <sou:data>SomeData</sou:data> 
      </sou:Elements> 
      <sou:Elements> 
      <sou:data>SomeData1</sou:data> 
      </sou:Elements> 
      <sou:Elements> 
      <sou:data>SomeData2</sou:data> 
      </sou:Elements> 
      <sou:Elements> 
      <sou:data>SomeData3</sou:data> 
      </sou:Elements> 
     </sou:ElemCollection> 
     <sou:Elem3> 
      <sou:Elem2> 
      </sou:Elem2> 
     </sou:Elem3> 
     </sou:Elem3> 
    </sou:Elem2> 
    </sou:Body> 
</sou:rElement> 

даст следующий выходной XML, когда iteration установлен в 1:

<?xml version="1.0" encoding="UTF-8"?> 
<sou:rElement xmlns:sou="source.sample.com"> 
    <sou:Body> 
    <sou:Elem2> 
     <sou:Elem3> 
     <sou:ElemCollection> 
      <sou:Elements> 
      <sou:data>SomeData</sou:data> 
      </sou:Elements> 
     </sou:ElemCollection> 
     <sou:Elem3> 
      <sou:Elem2> 
      </sou:Elem2> 
     </sou:Elem3> 
     </sou:Elem3> 
    </sou:Elem2> 
    </sou:Body> 
</sou:rElement> 

И желаемый выходной XML, когда iteration также установлен на 2-4.

+0

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

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

  • Нет связанных вопросов^_^