xsl: копирует весь xml, кроме родительского узла, но сохраняет его дочерний узел - PullRequest
3 голосов
/ 17 июля 2009

Я хочу скопировать весь документ XML, но удалить родительский узел. Однако у этого родительского узла также есть дочерний элемент, который я хотел бы сохранить.

Узел для удаления - <LoginID>, а дочерний узел для хранения - <PAN>.

<InqRs>
    <LoginID>                <!-- remove -->
        <PAN>4506445</PAN>   <!--  keep  -->
    </LoginID>
    <RqUID>93</RqUID>
    <Dt>90703195116</Dt>
    <CaptureDate>704</CaptureDate>
    <ApprovalCode>934999</ApprovalCode>
    <StatusCode>000</StatusCode>
    <List>
        <Count>9</Count>
        <AddDataFlag>N</AddDataFlag>
        <Use>C</Use>
        <DetRec>
            <ID>007237048637</ID>
            <Type1>62</Type1>
            <Qual />
            <ID>0010</ID>
            <Status>1</Status>
            <InqFlag>Y</InqFlag>
        </DetRec>
    </List>
</InqRs>

Ответы [ 3 ]

7 голосов
/ 01 ноября 2012

Этот XSL должен делать все необходимое.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
<xsl:template match="*">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>   
<xsl:template match="InqRs/LoginID">
      <xsl:copy-of select="@*|node()" />    
  </xsl:template>
</xsl:stylesheet>
2 голосов
/ 17 июля 2009

из этого кода, если вы хотите удалить узел InqRs, просто примените следующий xsl:

<xsl:output method="xml"/>
<xsl:template match="node()">
    <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>

<xsl:template match="PAN">
    <LoginID>
           <xsl:copy-of select="."/>
    </LoginID>
</xsl:template>

вы получите что-то вроде этого

<InqRs>
    <LoginID> 
        <PAN> 4506445 </PAN>           
    </LoginID>
    <RqUID>93</RqUID>
    <Dt>90703195116</Dt>
    <CaptureDate>704</CaptureDate>
    <ApprovalCode>934999</ApprovalCode>
    <StatusCode>000</StatusCode>
    <List> 
         <Count>9</Count> 
         <AddDataFlag>N</AddDataFlag> 
         <Use>C</Use> 
         <DetRec> 
             <ID>007237048637</ID> 
             <Type1>62</Type1>
             <Qual/> 
             <ID>0010</ID> 
             <Status>1</Status> 
             <InqFlag>Y</InqFlag> 
         </DetRec> 
    </List>
<InqRs>

Я надеюсь, что это поможет вам

1 голос
/ 17 июля 2009
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="LoginID">
    <xsl:apply-templates select="PAN"/>
  </xsl:template>
  <xsl:template match="*">
   <xsl:copy><xsl:apply-templates/></xsl:copy>
  </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...