2015-01-14 2 views
0

Я работаю над преобразованием следующего xml.Как скопировать родительский узел на основе состояния дочернего узла с помощью XSLT?

<root> 

<node1> 
    <node2 id="1">xyz</node2> 
</node1> 

<node1> 
    <node2 id="2">abc</node2> 
</node1> 

<parent> 
<child>abc</child> 
</parent> 

</root> 

Я хочу, чтобы преобразовать его в следующем формате:

<root> 

<node1> 
    <node2 id="1">xyz</node2> 
</node1> 

<parent> 
<child>abc</child> 

<node1> 
    <node2 id="2">abc</node2> 
</node1> 

</parent> 

</root> 
  • Я использую шаблон идентичности, чтобы скопировать все элементы
  • Я добавил шаблон, чтобы скопировать дочерний элемент

Мне нужно проверить атрибут id и если он равен 2, а затем скопировать родительский узел. Буду признателен, если кто-нибудь поможет в этом.

Заранее спасибо.

ответ

1

Если формат входного XML является не отклоняясь много из, как в вашем вопросе, это XSLT будет работать:

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

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

<xsl:template match="/*/*[*[@id = '2']]"/> 

<xsl:template match="parent"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
     <xsl:copy-of select="/*/*[*[@id = '2']]"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:transform> 
Смежные вопросы