2016-09-14 6 views
0

Как удалить дочерние элементы, узлы и родительские элементы в xml с помощью xsl.Как удалить элементы xml с помощью xsl?

вот мой xml-код.

<?xml version="1.0" encoding="UTF-8"?> 
<Checkpax xmlns="http://xml.api.com/test"> 
    <customerLevel> 
     <surname>MUKHERJEE</surname> 
     <type>A</type> 
     <gender>M</gender> 
     <otherPaxDetails> 
      <givenName>JOY</givenName> 
      <title>MR</title> 
      <age>11</age> 
     </otherPaxDetails> 
     <otherPaxDetails> 
      <title>MR</title> 
     </otherPaxDetails> 
     <staffDetails> 
      <staffInfo/> 
      <staffCategoryInfo> 
       <attributeDetails> 
        <attributeType>NA</attributeType> 
       </attributeDetails> 
      </staffCategoryInfo> 
     </staffDetails> 
     <productLevel> 
      <legLevel> 
       <legLevelIndicator> 
        <statusDetails> 
         <indicator>abc</indicator> 
         <action>1</action> 
        </statusDetails> 
       </legLevelIndicator> 
      </legLevel> 
     </productLevel> 
     <CustomerLevel> 
      <legLevel> 
       <legLevelIndicator> 
        <statusDetails> 
         <indicator>cde</indicator> 
         <action>1</action> 
        </statusDetails> 
       </legLevelIndicator> 
      </legLevel> 
     </CustomerLevel> 
    </customerLevel> 
</Checkpax> 

Ожидаемый выход XML:

<Checkpax xmlns="http://xml.api.com/test"> 
    <paxDetails> 
     <surname>MUKHERJEE</surname> 
     <gender>M</gender> 
    </paxDetails> 
    <otherPaxDetails> 
     <title>MR</title> 
     <age>11</age> 
    </otherPaxDetails> 
    <otherPaxDetails> 
     <title>MR</title> 
    </otherPaxDetails> 
    <staffDetails> 
     <staffCategoryInfo> 
      <attributeDetails> 
       <attributeType>NA</attributeType> 
      </attributeDetails> 
     </staffCategoryInfo> 
    </staffDetails> 
    <legLevelIndicator> 
     <statusDetails> 
      <indicator>abc</indicator> 
     </statusDetails> 
    </legLevelIndicator> 
    <CustomerLevel> 
     <legLevel> 
      <legLevelIndicator> 
       <indicator>cde</indicator> 
       <action>1</action> 
      </legLevelIndicator> 
     </legLevel> 
    </CustomerLevel> 
</Checkpax> 

XSL я попытался с моей стороны:

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

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

    <!-- Apply all child nodes; don't copy the element itself --> 
    <xsl:template match="ns0:customerLevel| ns0:customerDetails| ns0:paxDetails"> 
    <xsl:apply-templates/> 
    </xsl:template> 

</xsl:stylesheet> 

Просьба предложить таблицу стилей для получения ожидаемого XML output.i не знаете reminging вещи, как удалить element.also это поможет много для многих людей, которые ищут удаление элемента в xml с помощью xsl.

ответ

0

AFAICT, ваш второй шаблон должен быть:

<xsl:template match="ns0:productLevel | ns0:legLevel"> 
    <xsl:apply-templates/> 
</xsl:template> 

Это удалит productLevel и legLevel оберток, и поднять legLevelIndicator быть братьями и сестрами staffDetails.


дать мне несколько советов, как удалить <age>11</age> тег под в otherPaxDetails

Добавить пустой шаблон соответствия age:

<xsl:template match="ns0:age"/> 

Если вы, возможно, другие элементы с тем же именем, затем узкие шп шаблон матча:

<xsl:template match="ns0:otherPaxDetails/ns0:age"/> 
+0

дать мне несколько советов, как удалить тег под элементом otherPaxDetails @ michael.hor257k – sathya

+0

@vidya Смотрите правку на мой пост.. –

+0

да это полезно. Работа для меня. Конечно, я отметю это. @ Michael.hor257k – sathya

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