Копировать и фильтровать XML на основе условия - PullRequest
0 голосов
/ 14 июня 2019

Я работаю над XSLT, которому нужно скопировать весь XML, сохранив ту же структуру и отфильтровав некоторые узлы на основе условия.

в приведенном ниже примере мне нужно сохранить только те узлы, где IsBusinness = Y

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

желаемый вывод

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

1 Ответ

0 голосов
/ 14 июня 2019

Используйте это

 <!-- 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...