根据条件复制和过滤XML

时间:2019-06-13 21:16:10

标签: xml xslt

我正在研究一个XSLT,它需要复制保持相同结构的整个XML,并根据条件过滤掉某些节点。

在下面的示例中,我只需要保留IsBusinness = Y

的节点
test

所需的输出

<CompanyTypes>
  <Parent1>
    <ChildNode1>Test</ChildNode1>
    <ChildNode2>Test</ChildNode2>
    <CompanyType>
       <CompanyTypeID>1</CompanyTypeID>
       <CompanyTypeName>Individual</CompanyTypeName>
       <CompanyTypeDesc>Individual</CompanyTypeDesc>
        <IsBusiness>N</IsBusiness>
     </CompanyType>
  </Parent1>
  <Parent1>
    <ChildNode1>Test1</ChildNode1>
    <ChildNode2>Test</ChildNode2>
    <CompanyType>
       <CompanyTypeID>1</CompanyTypeID>
       <CompanyTypeName>Individual</CompanyTypeName>
       <CompanyTypeDesc>Individual</CompanyTypeDesc>
       <IsBusiness>Y</IsBusiness>
     </CompanyType>
  </Parent1>
  <Parent1>
    <ChildNode1>Test3</ChildNode1>
    <ChildNode2>Test9</ChildNode2>
    <CompanyType>
      <CompanyTypeID>1</CompanyTypeID>
      <CompanyTypeName>Individual</CompanyTypeName>
      <CompanyTypeDesc>Individual</CompanyTypeDesc>
      <IsBusiness>Y</IsBusiness>
    </CompanyType>
   </Parent1>
 </CompanyTypes>

1 个答案:

答案 0 :(得分:0)

使用此

 <!-- Identical Template to copy all structure -->
    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>

    <!-- This template delete all CompanyType which node IsBusinness != Y -->    
    <xsl:template match="Parent1[CompanyType/IsBusiness != 'Y']"/>

请参见https://xsltfiddle.liberty-development.net/gWvjQfV/1上的变换

输出

<CompanyTypes>
       <Parent1>
          <ChildNode1>Test1</ChildNode1>
          <ChildNode2>Test</ChildNode2>
          <CompanyType>
             <CompanyTypeID>1</CompanyTypeID>
             <CompanyTypeName>Individual</CompanyTypeName>
             <CompanyTypeDesc>Individual</CompanyTypeDesc>
             <IsBusiness>Y</IsBusiness>
          </CompanyType>
       </Parent1>
       <Parent1>
          <ChildNode1>Test3</ChildNode1>
          <ChildNode2>Test9</ChildNode2>
          <CompanyType>
             <CompanyTypeID>1</CompanyTypeID>
             <CompanyTypeName>Individual</CompanyTypeName>
             <CompanyTypeDesc>Individual</CompanyTypeDesc>
             <IsBusiness>Y</IsBusiness>
          </CompanyType>
       </Parent1>
    </CompanyTypes>