2014-11-25 1 views
0

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

Не могли бы вы помочь мне в создании XSLT для входного XML.

Входной XML:

<root> 
<Record> 
<Emp_ID>288237</Emp_ID> 
<Emp_Name>John</Emp_Name> 
<Country>US</Country> 
<Manager>Wills</Manager> 
<Join_Date>5/12/2014</Join_Date> 
<Experience>9 years</Experience> 
<Project>abc</Project> 
<Skill>java</Skill> 
<Project>def</Project> 
<Skill>unix</Skill> 
<Project>efg</Project> 
<Skill>xml</Skill> 
<Project>pqr</Project> 
<Skill>sql</Skill> 
<Project>xyz</Project> 
<Skill>Analytics</Skill> 
</Record> 
</root> 

Желаемая Вывод XML:

<root> 
<Record> 
<Emp_ID>288237</Emp_ID> 
<Emp_Name>John</Emp_Name> 
<Country>US</Country> 
<Manager>Wills</Manager> 
<Join_Date>5/12/2014</Join_Date> 
<Experience>9 years</Experience> 
<Project>abc</Project> 
<Skill>java</Skill> 
</Record> 
<Record> 
<Emp_ID>288237</Emp_ID> 
<Emp_Name>John</Emp_Name> 
<Country>US</Country> 
<Manager>Wills</Manager> 
<Join_Date>5/12/2014</Join_Date> 
<Experience>9 years</Experience> 
<Project>def</Project> 
<Skill>unix</Skill> 
</Record> 
<Record> 
<Emp_ID>288237</Emp_ID> 
<Emp_Name>John</Emp_Name> 
<Country>US</Country> 
<Manager>Wills</Manager> 
<Join_Date>5/12/2014</Join_Date> 
<Experience>9 years</Experience> 
<Project>efg</Project> 
<Skill>xml</Skill> 
</Record> 
<Record> 
<Emp_ID>288237</Emp_ID> 
<Emp_Name>John</Emp_Name> 
<Country>US</Country> 
<Manager>Wills</Manager> 
<Join_Date>5/12/2014</Join_Date> 
<Experience>9 years</Experience> 
<Project>pqr</Project> 
<Skill>sql</Skill> 
</Record> 
<Record> 
<Emp_ID>288237</Emp_ID> 
<Emp_Name>John</Emp_Name> 
<Country>US</Country> 
<Manager>Wills</Manager> 
<Join_Date>5/12/2014</Join_Date> 
<Experience>9 years</Experience> 
<Project>xyz</Project> 
<Skill>Analytics</Skill> 
</Record> 
</root> 

ответ

0

Это может быть сделано просто:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <root> 
     <xsl:for-each select="root/Record/Project"> 
      <Record> 
       <xsl:copy-of select="../*[not(self::Project or self::Skill)]"/> 
       <xsl:copy-of select=". | following-sibling::Skill[1]"/> 
      </Record> 
     </xsl:for-each> 
    </root> 
</xsl:template> 

</xsl:stylesheet> 
0

Вы можете использовать следующий XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output indent="yes" method="xml" /> 
<xsl:template match="root"> 
    <root> 
     <xsl:for-each select="Record/Project"> 
      <Record> 
      <xsl:copy-of select="../Emp_ID"/> 
      <xsl:copy-of select="../Emp_Name"/> 
      <xsl:copy-of select="../Country"/> 
      <xsl:copy-of select="../Join_Date"/> 
      <xsl:copy-of select="../Experience"/> 
      <xsl:copy-of select="."/> 
      <xsl:copy-of select="following::Skill[1]"/> 
      </Record> 
     </xsl:for-each> 
    </root> 
</xsl:template> 

</xsl:stylesheet> 
Смежные вопросы