2009-07-17 55 views
3

我想复制整个XML文档但删除父节点。然而,这个父节点也有一个我想保留的孩子。xsl:复制除父节点之外的整个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> 
+0

或突出显示它并使用编辑器上按钮的代码(看起来像二进制的一个......) – beggs 2009-07-17 02:47:01

+0

你为什么不喜欢我的编辑正确显示XML源代码? – 2009-07-17 03:04:19

+0

这是一个错误。我打开了几个浏览器,其中一个以正确的格式显示XML,另一个没有显示。我是这个网站的新手,所以我觉得我又犯了一些错误。 – user139873 2009-07-17 03:39:39

回答

1
<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> 
2

从代码,如果你想删除的节点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> 

我希望这帮你

7

这个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>