2014-05-12 1 views
1

Я хочу изменить следующий XML с помощью XSLT:Добавление новых узлов на основе числа существующих узлов с использованием XSLT

<?xml version="1.0" encoding="UTF-8"?> 
    <response> 
     <folder> 
      <CRDATTIM>2012-08-31-08.26.11.805400</CRDATTIM> 
      <RECORDCD>F</RECORDCD> 
     </folder> 
     <case> 
      <CRDATTIM>2014-03-26-05.22.22.339840</CRDATTIM> 
      <RECORDCD>C</RECORDCD> 
      <issue> 
      <KEY>2014-03-26-05.22.22.193840T01</KEY> 
      <PRTY>999</PRTY> 
      </issue> 
     </case> 
     <folder> 
      <CRDATTIM>2012-11-06-23.57.08.089400</CRDATTIM> 
      <RECORDCD>F</RECORDCD> 
     </folder> 
     <case> 
      <CRDATTIM>2014-04-29-06.58.32.992840</CRDATTIM> 
      <RECORDCD>C</RECORDCD> 
      <issue> 
      <KEY>2014-04-29-06.58.31.305840T01</KEY> 
      <PRTY>999</PRTY> 
      </issue> 
     </case> 
</response> 

Теперь я хочу, чтобы добавить новый узел <sort> в корневой узел <response> таким образом, что узел <sort> будет содержать два детей <field /> и <ascending />., здесь для каждого случая в приведенном выше XML, две метких <field /> и <ascending /> должны быть добавлены к <sort> node.For например, в приведенном выше XML, есть два случая (<case>). Итак, узел <sort> должен иметь два тега <field /> и <ascending /> тегов. В конечном счете, мой окончательный xml должен выглядеть следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <folder> 
     <CRDATTIM>2012-08-31-08.26.11.805400</CRDATTIM> 
     <RECORDCD>F</RECORDCD> 
    </folder> 
    <case> 
     <CRDATTIM>2014-03-26-05.22.22.339840</CRDATTIM> 
     <RECORDCD>C</RECORDCD> 
     <issue> 
     <KEY>2014-03-26-05.22.22.193840T01</KEY> 
     <PRTY>999</PRTY> 
     </issue> 
    </case> 
    <folder> 
     <CRDATTIM>2012-11-06-23.57.08.089400</CRDATTIM> 
     <RECORDCD>F</RECORDCD> 
    </folder> 
    <case> 
     <CRDATTIM>2014-04-29-06.58.32.992840</CRDATTIM> 
     <RECORDCD>C</RECORDCD> 
     <issue> 
     <KEY>2014-04-29-06.58.31.305840T01</KEY> 
     <PRTY>999</PRTY> 
     </issue> 
    </case> 
    <sort> 
     <field /> 
     <ascending /> 
     <field /> 
     <ascending /> 
     <field /> 
    </sort> 
</response> 

Пожалуйста, поделитесь своими мыслями о том, как достичь желаемой функциональности. Пожалуйста, дайте мне знать, если мой вопрос не ясен. Заранее спасибо.

ответ

2

Вы можете использовать шаблон идентификации для копирования исходного XML и поместить в конец элемент <sort>. Смотреть следующий урок: http://www.xmlplease.com/xsltidentity

Вот пример XSLT:

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

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

    <xsl:template match="response"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
      <sort> 
       <xsl:for-each select="case"> 
        <field /> 
        <ascending /> 
       </xsl:for-each> 
      </sort> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Отлично !! Большое спасибо. он работал для меня. + 1 для быстрого ответа –

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