'How to remove certain parts without changing the structure

Let's see if I can rephrase this question....

I have some large XML files that I want to remove certain data from without changing the structure of the date.

If you look at the source XML below you will see there are "singleparts" at different levels, either

parts/assembly/mainpart/proxy/singlepart

or just

parts/mainpart/proxy/singlepart

Within each singlepart is a part. When the part has a name starting with certain words or a role of a certain value I want that singlepart to be left out. In every other way the file should be unchanged.

Source XML '''

<modelExtract xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<header>
<modelFilename>C:\Dump\March 1.dwg</modelFilename>
<project>
  <name>Advance Steel Training</name>
  <number>AST987</number>
  <client>Hopeless Eng</client>
  <designer>He Did It</designer>
  <detailer>Not Me</detailer>
</project>
<extractId>MyModel.ModelExtracts.Key</extractId>
<updateIndex id="MyModel.ModelExtracts.State"/>
</header>
<selection key="22009">
  <base>AllMainparts</base>
  <DerivedDocuments>1</DerivedDocuments>
</selection>
<parts>
  <assembly name="Lot 1">
    <mainpart id="B4D5" num="C7" quantity="1">
      <explicitQuantity>1</explicitQuantity>
      <proxy ACADID="5906" basepart="33E" id="5905">
        <assemblyWeight>882396.39</assemblyWeight>
        <assemblyExactWeight>879283.91</assemblyExactWeight>
        <collisionSize x="6087.749" y="861.135" z="600.000"/>
        <ApprovalStatus>Not Set</ApprovalStatus>
        <GalvanizingConstructionClass>None</GalvanizingConstructionClass>
        <GalvanizingDetailClass>None</GalvanizingDetailClass>
        <GalvanizingConfidence>None</GalvanizingConfidence>
        <singlepart id="B4BE" num="M1023" quantity="1">
          <explicitQuantity>1</explicitQuantity>
          <part ACADID="33F" class="Beam" dstvName="UC356x368x129" id="33E" name="UC356x368x129">
              <explicitQuantity>1</explicitQuantity>
              <role key="Column" name="Column"/>
              <length>6049.338</length>
              <paintArea>13095606.902</paintArea>
              <numHoles>18</numHoles>
              <ObjectTopLevel>24079.339</ObjectTopLevel>
              <ObjectBottomLevel>18030.001</ObjectBottomLevel>
              <material key="S275JR" name="S275JR"/>
              <coating key="CAS" name="Coating as specified"/>
              <weight>780364.60</weight>
              <exactWeight>779397.56</exactWeight>
              <weightPerMeter>129000.00</weightPerMeter>
              <density>7850.00</density>
              <section key="UniversalColumn BS EN10210-2 1990#@§@#UC356x368x129" name="UC356x368x129"/>
              <sysLength>6000.000</sysLength>
              <sawLength>6049.338</sawLength>
              <angleX1>0.0000</angleX1>
              <angleY1>0.0000</angleY1>
              <angleX2>0.0000</angleX2>
              <angleY2>0.0000</angleY2>
              <SawCutInfo>-1</SawCutInfo>
              <SawLengthFlangeAtStart>0.000</SawLengthFlangeAtStart>
              <SawLengthWebAtStart>0.000</SawLengthWebAtStart>
              <SawLengthFlangeAtEnd>0.000</SawLengthFlangeAtEnd>
              <SawLengthWebAtEnd>0.000</SawLengthWebAtEnd>
              <ElementID>9</ElementID>
          </part>
        </singlepart>
        <singlepart id="B4F4" num="none-5" quantity="4">
          <explicitQuantity>4</explicitQuantity>
          <part ACADID="8D7F" class="SpecialPart" dstvName="Captive Nut M16" id="8D80" name="Captive Nut M16">
              <explicitQuantity>1</explicitQuantity>
              <denotation>nut16</denotation>
              <length>27.000</length>
              <paintArea>0.000</paintArea>
              <ObjectTopLevel>23905.596</ObjectTopLevel>
              <ObjectBottomLevel>23882.213</ObjectBottomLevel>
              <commodity>Captive Nut M16</commodity>
              <density>0.00</density>
              <width>23.383</width>
              <blockname>nut16</blockname>
          </part>
          <equalpart ACADID="8D7C" id="8D7D" name="Captive Nut M16">
              <explicitQuantity>1</explicitQuantity>
          </equalpart>
          <equalpart ACADID="8D79" id="8D7A" name="Captive Nut M16">
              <explicitQuantity>1</explicitQuantity>
          </equalpart>
          <equalpart ACADID="8D73" id="8D72" name="Captive Nut M16">
              <explicitQuantity>1</explicitQuantity>
          </equalpart>
        </singlepart>
      </proxy>
      <anchorPatternOnSite ACADID="99E8" class="AnchorPattern" id="99E7" name="M20 x 300 HOLDING DOWN BOLTS 4.6 - Bright Zinc Plated - NaW" nameBolt="M20 x 300 HD BOLT" num="anc-1000" setkey="1">
        <explicitQuantity>1</explicitQuantity>
        <set key="MuS" name="NaW"/>
        <numBolts>4</numBolts>
        <role key="Anchor_Bolt#1" name="Anchor Bolt"/>
        <standard key="HOLDING DOWN BOLTS" name="HOLDING DOWN BOLTS"/>
        <diameter>20.000</diameter>
        <material key="4.6" name="4.6"/>
        <coating key="BZP" name="Bright Zinc Plated"/>
        <density>0.00</density>
        <boltLength>300.000</boltLength>
        <unfoldedLength>300.000</unfoldedLength>
        <holeTolerance>4.000</holeTolerance>
        <mountLocation>0</mountLocation>
        <ConnectedPartsIds>59B4,5905;</ConnectedPartsIds>
      </anchorPatternOnSite>
    </mainpart>
    <mainpart id="59C8" ncFile="C1.nc" num="C1" quantity="3">
      <explicitQuantity>3</explicitQuantity>
      <proxy ACADID="5908" basepart="340" id="5907">
        <assemblyWeight>882396.39</assemblyWeight>
        <assemblyExactWeight>879420.05</assemblyExactWeight>
        <collisionSize x="6087.749" y="861.135" z="600.000"/>
        <ApprovalStatus>Not Set</ApprovalStatus>
        <GalvanizingConstructionClass>None</GalvanizingConstructionClass>
        <GalvanizingDetailClass>None</GalvanizingDetailClass>
        <GalvanizingConfidence>None</GalvanizingConfidence>
        <singlepart id="599B" num="M1004" quantity="1">
          <explicitQuantity>1</explicitQuantity>
          <part ACADID="341" class="Beam" dstvName="UC356x368x129" id="340" name="UC356x368x129">
              <explicitQuantity>1</explicitQuantity>
              <role key="Column#2" name="Column"/>
              <length>6049.338</length>
              <paintArea>13095606.902</paintArea>
              <numHoles>14</numHoles>
              <ObjectTopLevel>24079.339</ObjectTopLevel>
              <ObjectBottomLevel>18030.001</ObjectBottomLevel>
              <material key="S275JR" name="S275JR"/>
              <coating key="CAS" name="Coating as specified"/>
              <weight>780364.60</weight>
              <exactWeight>779533.70</exactWeight>
              <weightPerMeter>129000.00</weightPerMeter>
              <density>7850.00</density>
              <section key="UniversalColumn BS EN10210-2 1990#@§@#UC356x368x129" name="UC356x368x129"/>
              <sysLength>6000.000</sysLength>
              <sawLength>6049.338</sawLength>
              <angleX1>0.0000</angleX1>
              <angleY1>0.0000</angleY1>
              <angleX2>0.0000</angleX2>
              <angleY2>0.0000</angleY2>
              <SawCutInfo>-1</SawCutInfo>
              <SawLengthFlangeAtStart>0.000</SawLengthFlangeAtStart>
              <SawLengthWebAtStart>0.000</SawLengthWebAtStart>
              <SawLengthFlangeAtEnd>0.000</SawLengthFlangeAtEnd>
              <SawLengthWebAtEnd>0.000</SawLengthWebAtEnd>
              <ElementID>10</ElementID>
              <ElementID>198</ElementID>
              <ElementID>202</ElementID>
          </part>
        </singlepart>
        <singlepart id="59B4" ncFile="F1005.nc" num="F1005" quantity="1">
          <explicitQuantity>1</explicitQuantity>
          <part ACADID="9249" class="Plate" dstvName="FL600x30" id="9248" name="FL600x30">
              <explicitQuantity>1</explicitQuantity>
              <role key="Baseplate" name="Base Plate"/>
              <externalName index="1" name="FL600x30"/>
              <length>600.000</length>
              <paintArea>792000.000</paintArea>
              <numHoles>4</numHoles>
              <ObjectTopLevel>18030.000</ObjectTopLevel>
              <ObjectBottomLevel>18000.000</ObjectBottomLevel>
              <material key="S275JR" name="S275JR"/>
              <coating key="CAS" name="Coating as specified"/>
              <weight>84780.00</weight>
              <exactWeight>84364.65</exactWeight>
              <density>7850.00</density>
              <thickness>30.000</thickness>
              <width>600.000</width>
              <area1>360000.000</area1>
              <area2>360000.000</area2>
              <contourLength>2400.000</contourLength>
              <ElementID>208</ElementID>
              <ElementID>191</ElementID>
              <ElementID>212</ElementID>
          </part>
        </singlepart>
      </proxy>
      <equalpart ACADID="5916" explicitQuantity="1" id="5915">
        <assemblyWeight>882396.39</assemblyWeight>
        <assemblyExactWeight>879420.05</assemblyExactWeight>
      </equalpart>
      <anchorPatternOnSite ACADID="9262" class="AnchorPattern" id="9261" name="M20 x 300 HOLDING DOWN BOLTS 4.6 - Bright Zinc Plated - NaW" nameBolt="M20 x 300 HD BOLT" num="anc-1000" setkey="1">
        <explicitQuantity>1</explicitQuantity>
        <set key="MuS" name="NaW"/>
        <numBolts>4</numBolts>
        <role key="Anchor_Bolt#1" name="Anchor Bolt"/>
        <standard key="HOLDING DOWN BOLTS" name="HOLDING DOWN BOLTS"/>
        <diameter>20.000</diameter>
        <material key="4.6" name="4.6"/>
        <coating key="BZP" name="Bright Zinc Plated"/>
        <density>0.00</density>
        <boltLength>300.000</boltLength>
        <unfoldedLength>300.000</unfoldedLength>
        <holeTolerance>4.000</holeTolerance>
        <mountLocation>0</mountLocation>
        <ConnectedPartsIds>59B4,5907;</ConnectedPartsIds>
        <equalpart ACADID="92F6" id="92F5" name="M20 x 300 HOLDING DOWN BOLTS 4.6 - Bright Zinc Plated - NaW">
          <explicitQuantity>1</explicitQuantity>
          <ConnectedPartsIds>59B4,5915;</ConnectedPartsIds>
        </equalpart>
        <equalpart ACADID="9240" id="923F" name="M20 x 300 HOLDING DOWN BOLTS 4.6 - Bright Zinc Plated - NaW">
          <explicitQuantity>1</explicitQuantity>
          <ConnectedPartsIds>59B4,5917;</ConnectedPartsIds>
        </equalpart>
      </anchorPatternOnSite>
    </mainpart>
    <boltPatternOnSite ACADID="9A0C" class="BoltPattern" id="9A0B" name="M24 x 70 ISO 4017 Screw 8.8 - Bright Zinc Plated - CE Mark BZP" nameBolt="Hexagon head screw ISO 4017 - M24x70 - 8.8" num="bo1000" setBoltsType="1" setkey="2">
      <explicitQuantity>1</explicitQuantity>
      <set key="CE Mark BZP" name="CE Mark BZP"/>
      <numBolts>1</numBolts>
      <role key="Bolt#1" name="Bolt"/>
      <standard key="ISO 4017 Screw" name="ISO 4017 Screw"/>
      <diameter>24.000</diameter>
      <material key="8.8" name="8.8"/>
      <coating key="BZP" name="Bright Zinc Plated"/>
      <density>0.00</density>
      <boltLength>70.000</boltLength>
      <fitLength>37.500</fitLength>
      <fitLengthIncrement>0.000</fitLengthIncrement>
      <holeTolerance>2.000</holeTolerance>
      <mountLocation>0</mountLocation>
      <ConnectedPartsIds>59B3,5919;599B,5915;</ConnectedPartsIds>
    </boltPatternOnSite>
  </assembly>
  <assembly name="Lot 4">
    <mainpart id="692D" num="EB1" quantity="3">
      <explicitQuantity>3</explicitQuantity>
      <proxy ACADID="A564" basepart="A561" id="A563">
        <assemblyWeight>29641.60</assemblyWeight>
        <assemblyExactWeight>29641.60</assemblyExactWeight>
        <collisionSize x="4000.000" y="275.882" z="100.475"/>
        <ApprovalStatus>Not Set</ApprovalStatus>
        <GalvanizingConstructionClass>None</GalvanizingConstructionClass>
        <GalvanizingDetailClass>None</GalvanizingDetailClass>
        <GalvanizingConfidence>None</GalvanizingConfidence>
        <singlepart id="693D" num="EB1" quantity="1">
          <explicitQuantity>1</explicitQuantity>
          <part ACADID="A562" class="Beam" dstvName="TPP 250FE20(15)" id="A561" name="TPP 250FE20(15)">
              <explicitQuantity>1</explicitQuantity>
              <role key="Eaves_Beam#2" name="Cold Rolled Eaves Beam"/>
              <length>4000.000</length>
              <paintArea>3792000.000</paintArea>
              <ObjectTopLevel>24179.344</ObjectTopLevel>
              <ObjectBottomLevel>23903.462</ObjectBottomLevel>
              <material key="S275JR" name="S275JR"/>
              <coating key="CAS" name="Coating as specified"/>
              <weight>29641.60</weight>
              <exactWeight>29641.60</exactWeight>
              <weightPerMeter>7410.40</weightPerMeter>
              <density>7850.00</density>
              <section key="ThomasPanels_EB_FE#@§@#TP_FE 250FE20(15)" name="TPP 250FE20(15)"/>
              <sysLength>4000.000</sysLength>
              <sawLength>4000.000</sawLength>
              <angleX1>0.0000</angleX1>
              <angleY1>0.0000</angleY1>
              <angleX2>0.0000</angleX2>
              <angleY2>0.0000</angleY2>
              <SawCutInfo>0</SawCutInfo>
              <ElementID>590</ElementID>
              <ElementID>591</ElementID>
              <ElementID>592</ElementID>
          </part>
        </singlepart>
      </proxy>
      <equalpart ACADID="A566" explicitQuantity="1" id="A565">
        <assemblyWeight>29641.60</assemblyWeight>
        <assemblyExactWeight>29641.60</assemblyExactWeight>
      </equalpart>
      <equalpart ACADID="A568" explicitQuantity="1" id="A567">
        <assemblyWeight>29641.60</assemblyWeight>
        <assemblyExactWeight>29641.60</assemblyExactWeight>
      </equalpart>
    </mainpart>
    <mainpart id="6933" num="CL9" quantity="1">
      <explicitQuantity>1</explicitQuantity>
      <proxy ACADID="B293" basepart="B28E" id="B292">
        <assemblyWeight>2595.73</assemblyWeight>
        <assemblyExactWeight>2261.65</assemblyExactWeight>
        <collisionSize x="1968.200" y="299.999" z="18.820"/>
        <ApprovalStatus>Not Set</ApprovalStatus>
        <GalvanizingConstructionClass>None</GalvanizingConstructionClass>
        <GalvanizingDetailClass>None</GalvanizingDetailClass>
        <GalvanizingConfidence>None</GalvanizingConfidence>
        <singlepart id="6943" num="CL9" quantity="1">
          <explicitQuantity>1</explicitQuantity>
          <part ACADID="B28F" class="Beam" dstvName="0.42 BMT" id="B28E" name="0.42 BMT">
              <explicitQuantity>1</explicitQuantity>
              <role key="Cladding_profile#85" name="Cladding Profile"/>
              <length>1968.200</length>
              <paintArea>1576252.457</paintArea>
              <ObjectTopLevel>25666.930</ObjectTopLevel>
              <ObjectBottomLevel>25083.346</ObjectBottomLevel>
              <material key="S275JR" name="S275JR"/>
              <coating key="CAS" name="Coating as specified"/>
              <commodity>[8][None][None]</commodity>
              <weight>2595.73</weight>
              <exactWeight>2261.65</exactWeight>
              <weightPerMeter>1318.83</weightPerMeter>
              <density>7850.00</density>
              <section key="Lysaght Easyclad#@§@#0.42 BMT" name="0.42 BMT"/>
              <sysLength>1968.200</sysLength>
              <sawLength>1968.200</sawLength>
              <angleX1>0.0000</angleX1>
              <angleY1>0.0000</angleY1>
              <angleX2>0.0000</angleX2>
              <angleY2>0.0000</angleY2>
              <SawCutInfo>0</SawCutInfo>
              <ElementID>762</ElementID>
          </part>
        </singlepart>
      </proxy>
    </mainpart>
    <boltPatternOnSite ACADID="B3B1" class="BoltPattern" id="B3B0" name="M16 x 30 SET 8.8 - Bright Zinc Plated - W+WN" nameBolt="M16 x 30 SET - 8.8" num="bo1007" setBoltsType="1" setkey="11">
      <explicitQuantity>1</explicitQuantity>
      <set key="W+WN" name="W+WN"/>
      <numBolts>1</numBolts>
      <role key="Bolt#2" name="Bolt"/>
      <standard key="SET" name="SET"/>
      <diameter>16.000</diameter>
      <material key="8.8" name="8.8"/>
      <coating key="BZP" name="Bright Zinc Plated"/>
      <density>0.00</density>
      <boltLength>30.000</boltLength>
      <fitLength>5.400</fitLength>
      <fitLengthIncrement>0.000</fitLengthIncrement>
      <holeTolerance>2.000</holeTolerance>
      <mountLocation>0</mountLocation>
      <ConnectedPartsIds>693E,B3F2;6946,A571;6944,B3FC;</ConnectedPartsIds>
    </boltPatternOnSite>
  </assembly>
  <mainpart id="DF80" num="RL6" quantity="8">
    <explicitQuantity>8</explicitQuantity>
    <proxy ACADID="DEC0" basepart="DD88" id="DEBF">
      <assemblyWeight>2159.94</assemblyWeight>
      <assemblyExactWeight>2159.94</assemblyExactWeight>
      <collisionSize x="1083.149" y="33.700" z="33.700"/>
      <ApprovalStatus>Not Set</ApprovalStatus>
      <GalvanizingConstructionClass>None</GalvanizingConstructionClass>
      <GalvanizingDetailClass>None</GalvanizingDetailClass>
      <GalvanizingConfidence>None</GalvanizingConfidence>
      <singlepart id="DF94" num="RL6" quantity="1">
        <explicitQuantity>1</explicitQuantity>
        <part ACADID="DD89" class="Beam" dstvName="RO33.7X2.6" id="DD88" name="RO33.7X2.6">
          <explicitQuantity>1</explicitQuantity>
          <role key="Railing_Post_Landing" name="Railing Post Landing"/>
          <length>1083.149</length>
          <paintArea>114674.796</paintArea>
          <ObjectTopLevel>22083.149</ObjectTopLevel>
          <ObjectBottomLevel>21000.000</ObjectBottomLevel>
          <material key="S275JR" name="S275JR"/>
          <coating key="CAS" name="Coating as specified"/>
          <weight>2159.94</weight>
          <exactWeight>2159.94</exactWeight>
          <weightPerMeter>1994.13</weightPerMeter>
          <density>7850.00</density>
          <section key="Pipe nach DIN#@§@#RO33.7X2.6" name="RO33.7X2.6"/>
          <sysLength>1100.000</sysLength>
          <sawLength>1083.149</sawLength>
          <angleX1>0.0000</angleX1>
          <angleY1>0.0000</angleY1>
          <angleX2>0.0000</angleX2>
          <angleY2>0.0000</angleY2>
          <SawCutInfo>0</SawCutInfo>
          <ElementID>3226</ElementID>
          <ElementID>3222</ElementID>
          <ElementID>3223</ElementID>
          <ElementID>3224</ElementID>
          <ElementID>3225</ElementID>
          <ElementID>3227</ElementID>
          <ElementID>3221</ElementID>
          <ElementID>3220</ElementID>
        </part>
      </singlepart>
    </proxy>
    <equalpart ACADID="DECE" explicitQuantity="1" id="DECD">
      <assemblyWeight>2159.94</assemblyWeight>
      <assemblyExactWeight>2159.94</assemblyExactWeight>
    </equalpart>
  </mainpart>
  <mainpart id="DF86" num="RL11" quantity="1">
    <explicitQuantity>1</explicitQuantity>
    <proxy ACADID="DED0" basepart="DDA8" id="DECF">
      <assemblyWeight>9381.60</assemblyWeight>
      <assemblyExactWeight>9381.60</assemblyExactWeight>
      <collisionSize x="4704.610" y="33.700" z="33.700"/>
      <ApprovalStatus>Not Set</ApprovalStatus>
      <GalvanizingConstructionClass>None</GalvanizingConstructionClass>
      <GalvanizingDetailClass>None</GalvanizingDetailClass>
      <GalvanizingConfidence>None</GalvanizingConfidence>
      <singlepart id="DF9A" num="RL11" quantity="1">
        <explicitQuantity>1</explicitQuantity>
        <part ACADID="DDA9" class="Beam" dstvName="RO33.7X2.6" id="DDA8" name="RO33.7X2.6">
          <explicitQuantity>1</explicitQuantity>
          <role key="Railing_Handrail_Stair" name="Railing Handrail Stair"/>
          <length>4704.610</length>
          <paintArea>498084.922</paintArea>
          <ObjectTopLevel>22102.631</ObjectTopLevel>
          <ObjectBottomLevel>19137.369</ObjectBottomLevel>
          <material key="S275JR" name="S275JR"/>
          <coating key="CAS" name="Coating as specified"/>
          <weight>9381.60</weight>
          <exactWeight>9381.60</exactWeight>
          <weightPerMeter>1994.13</weightPerMeter>
          <density>7850.00</density>
          <section key="Pipe nach DIN#@§@#RO33.7X2.6" name="RO33.7X2.6"/>
          <sysLength>4738.312</sysLength>
          <sawLength>4704.610</sawLength>
          <angleX1>0.0000</angleX1>
          <angleY1>0.0000</angleY1>
          <angleX2>0.0000</angleX2>
          <angleY2>0.0000</angleY2>
          <SawCutInfo>-1</SawCutInfo>
          <SawLengthFlangeAtStart>0.000</SawLengthFlangeAtStart>
          <SawLengthWebAtStart>0.000</SawLengthWebAtStart>
          <SawLengthFlangeAtEnd>0.000</SawLengthFlangeAtEnd>
          <SawLengthWebAtEnd>0.000</SawLengthWebAtEnd>
          <ElementID>3228</ElementID>
        </part>
      </singlepart>
    </proxy>
  </mainpart>
  <mainpart id="DF8D" num="NONE8" quantity="8">
    <explicitQuantity>8</explicitQuantity>
    <proxy ACADID="DF26" basepart="DE6F" id="DF25">
      <assemblyWeight>0.00</assemblyWeight>
      <assemblyExactWeight>0.00</assemblyExactWeight>
      <collisionSize x="92.000" y="48.250" z="46.000"/>
      <ApprovalStatus>Not Set</ApprovalStatus>
      <GalvanizingConstructionClass>None</GalvanizingConstructionClass>
      <GalvanizingDetailClass>None</GalvanizingDetailClass>
      <GalvanizingConfidence>None</GalvanizingConfidence>
      <singlepart id="DFA6" num="NONE8" quantity="1">
        <explicitQuantity>1</explicitQuantity>
        <part ACADID="DE70" class="SpecialPart" dstvName="26-6Model" id="DE6F" name="26-6Model">
          <explicitQuantity>1</explicitQuantity>
          <denotation>26-6Model</denotation>
          <length>92.000</length>
          <paintArea>0.000</paintArea>
          <ObjectTopLevel>21623.000</ObjectTopLevel>
          <ObjectBottomLevel>21577.000</ObjectBottomLevel>
          <material key="S275JR" name="S275JR"/>
          <commodity>26-6Model</commodity>
          <density>7850.00</density>
          <width>48.250</width>
          <blockname>26-6Model</blockname>
        </part>
      </singlepart>
    </proxy>
    <equalpart ACADID="DF42" explicitQuantity="1" id="DF41">
      <assemblyWeight>0.00</assemblyWeight>
      <assemblyExactWeight>0.00</assemblyExactWeight>
    </equalpart>
  </mainpart>
</parts>

'''

and here is my XSLT file: '''

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
  
  <xsl:template match="/">
    <modelExtract>
      <xsl:for-each select="node()">
        <xsl:apply-templates select="node()"/>
      </xsl:for-each>
    </modelExtract>
  </xsl:template>

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

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

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

  <xsl:template match="parts">
    <parts>
        <xsl:for-each select="mainpart">
            <xsl:call-template name="handlePart">
                <xsl:with-param name="currNodePart" select="current()"/>
            </xsl:call-template>
        </xsl:for-each>
        
        <xsl:for-each select="assembly">
            <xsl:for-each select="mainpart">
                <xsl:call-template name="handlePart">
                    <xsl:with-param name="currNodePart" select="current()"/>
                </xsl:call-template>
            </xsl:for-each>
        </xsl:for-each>
        
        <xsl:for-each select="singlepart">
            <xsl:call-template name="handlePart">
                <xsl:with-param name="currNodePart" select="current()"/>
            </xsl:call-template>
        </xsl:for-each>
        
    </parts>
  </xsl:template>

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

  <xsl:template name="handlePart">
    <xsl:param name="currNodePart"/>
    <xsl:variable name="Namee" select="$currNodePart/proxy/singlepart/part/section/@key"/>
    <xsl:variable name="ModelRolee" select="$currNodePart/proxy/singlepart/part/role/@key"/>
    <xsl:variable name="StaringStringVarB" select="substring($Namee, 1, 3)"/>
    <xsl:choose>
      <xsl:when test="not
                    (
                    starts-with($Namee,'AGBrown')
                    or
                    starts-with($Namee,'Albion')
                    or
                    starts-with($Namee,'Ayrshire')
                    or
                    starts-with($Namee,'BWIndustries')
                    or
                    starts-with($Namee,'Hi Span')
                    or
                    starts-with($Namee,'HiSpan')
                    or
                    starts-with($Namee,'Kingspan')
                    or
                    starts-with($Namee,'Usr Kingspan')
                    or
                    starts-with($Namee,'KSB')
                    or
                    starts-with($Namee,'KSP')
                    or
                    starts-with($Namee,'Metsec')
                    or
                    starts-with($Namee,'BWIndustries')
                    or
                    starts-with($Namee,'Steadmans')
                    or
                    starts-with($Namee,'Usr Steel Sections')
                    or
                    starts-with($Namee,'Steel Sections')
                    or
                    starts-with($Namee,'Tegral')
                    or
                    starts-with($Namee,'ThomasPanels')
                    or
                    starts-with($Namee,'Usr Thomas Panels')
                    or
                    starts-with($Namee,'Ultra')
                    or
                    starts-with($Namee,'Usr Ultra')
                    or
                    starts-with($ModelRolee, 'Cladding_profile')
                    )">
        <xsl:copy-of select="."/>
      </xsl:when>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>

'''

Sorry if they are very long, I have tried to strip out much of the data but need to leave some to show the structure. I can't find how to attach sample files. I have tried to format it clearly.

As I say, my XSLT gives back the XML without the unwanted parts but also without the "assembly" level. If possible I would like a much simpler way to say just skip the unwanted parts.

Thanks.



Solution 1:[1]

Your comment after your question sounds as if <xsl:template match="mainpart//singlepart"/> plus the identity transformation template is all you need/want.

After your edit, based on your explication I would think you want the identity transformation plus an empty template for the elements (singlepart?) you want to be removed/omitted e.g.

<xsl:template match="singlepart[part/section/@key[starts-with(.,'AGBrown')
                    or
                    starts-with(.,'Albion')
                    or
                    starts-with(.,'Ayrshire')
                    or
                    starts-with(.,'BWIndustries')
                    or
                    starts-with(.,'Hi Span')
                    or
                    starts-with(.,'HiSpan')
                    or
                    starts-with(.,'Kingspan')
                    or
                    starts-with(.,'Usr Kingspan')
                    or
                    starts-with(.,'KSB')
                    or
                    starts-with(.,'KSP')
                    or
                    starts-with(.,'Metsec')
                    or
                    starts-with(.,'BWIndustries')
                    or
                    starts-with(.,'Steadmans')
                    or
                    starts-with(.,'Usr Steel Sections')
                    or
                    starts-with(.,'Steel Sections')
                    or
                    starts-with(.,'Tegral')
                    or
                    starts-with(.,'ThomasPanels')
                    or
                    starts-with(.,'Usr Thomas Panels')
                    or
                    starts-with(.,'Ultra')
                    or
                    starts-with(.,'Usr Ultra')] or part/role/@key[starts-with(., 'Cladding_profile')]]"/>

The identity transformation template is

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1