我试图对包含数千个节点的大型XML文件进行排序,并且为了排序所有节点的共同点,还有一个名为“ID”的属性。排序密集XML文件的节点
该属性之前的元素类型有所不同:它可以有多个名称,例如“Apt”,“CentreDrill”,“Reamer”,“Cylinder”,“Block”,“Model”,“Sweep”锥体“,”探针“和其他一些。这让我很难找出一种算法,可以进行正确的排序,而不管属性前的名称如何。
我不希望与outter元素的顺序混乱,那就是我想要的元素“参数米尔斯”,“参数钻头”,“工具架”,“探头触笔“,”抛光器“保持相同的顺序。我想对内部元素进行排序,如下图所示。
原始XML内容:精简版(287线)
<?xml version="1.0"?>
<Tools>
<Tool ID="Parametric Mills" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Teeth>2</Teeth>
<Type>Milling</Type>
<Cutter>
<Apt ID="10000" ParentID="" Type="FLAT END" >
<D>12.7</D>
<R>0</R>
<E>0</E>
<F>0</F>
<A>0</A>
<B>0</B>
<H>88.9</H>
<StickoutLength>63.5</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>50.8</FluteLength>
<Alternate>off</Alternate>
</Apt>
<Apt ID="2" ParentID="" Type="BALL END" >
<D>12.7</D>
<R>6.35</R>
<E>0</E>
<F>6.35</F>
<A>0</A>
<B>0</B>
<H>88.9</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>50.8</FluteLength>
<Alternate>off</Alternate>
</Apt>
<Apt ID="33" ParentID="" Type="TAPERED BULL NOSE" >
<D>12.7</D>
<R>0</R>
<E>0</E>
<F>0</F>
<A>0</A>
<B>5</B>
<H>88.9</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>50.8</FluteLength>
<ShankDiameter>12.7</ShankDiameter>
<Alternate>off</Alternate>
</Apt>
<Apt ID="3000" ParentID="" Type="BULL NOSE" >
<D>12.7</D>
<R>2</R>
<E>4.35</E>
<F>2</F>
<A>0</A>
<B>0</B>
<H>88.9</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>50.8</FluteLength>
<Alternate>off</Alternate>
</Apt>
</Cutter>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-114.3</Z>
</DrivenPoint>
</Tool>
<Tool ID="Parametric Drills" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Teeth>2</Teeth>
<Type>HoleMaking</Type>
<Cutter>
<Apt ID="5000" ParentID="" Type="DRILL" >
<D>9.525</D>
<R>0</R>
<E>0</E>
<F>0</F>
<A>31</A>
<B>0</B>
<H>101.6</H>
<StickoutLength>76.2</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>63.5</FluteLength>
<Alternate>off</Alternate>
</Apt>
<Reamer ID="111" ParentID="" DRILLMILL="FALSE" Type="Reamer" >
<ChamferLength>0.5</ChamferLength>
<D>12</D>
<H>100</H>
<ShankDiameter>12</ShankDiameter>
<StickoutLength>0</StickoutLength>
<SpindleDirection>CW</SpindleDirection>
<MAXIMUMMATERIALREMOVAL>0</MAXIMUMMATERIALREMOVAL>
<FluteLength>63.5</FluteLength>
<Alternate>off</Alternate>
</Reamer>
<CenterDrill ID="3" ParentID="" DRILLMILL="FALSE" Type="CenterDrill" >
<ChamferAngle>60</ChamferAngle>
<H>50</H>
<PilotAngle>31</PilotAngle>
<D>3</D>
<PilotLength>3</PilotLength>
<ShankDiameter>12</ShankDiameter>
<StickoutLength>0</StickoutLength>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>11.69552</FluteLength>
<Alternate>off</Alternate>
</CenterDrill>
</Cutter>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-127</Z>
</DrivenPoint>
</Tool>
<Tool ID="Tool Holders" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Teeth>2</Teeth>
<Type>Turning</Type>
<Holder>
<Block ID="455" ParentID="">
<Width>25.4</Width>
<Length>25.4</Length>
<Height>101.6</Height>
<NoSpin>0</NoSpin>
<Alternate>off</Alternate>
</Block>
<Cylinder ID="1" ParentID="">
<Radius>50</Radius>
<Height>10</Height>
<NoSpin>0</NoSpin>
<Alternate>off</Alternate>
</Cylinder>
<Cone ID="50000" ParentID="">
<ButtomRadius>30</ButtomRadius>
<TopRadius>10</TopRadius>
<Height>50</Height>
<NoSpin>0</NoSpin>
<Alternate>off</Alternate>
</Cone>
</Holder>
</Tool>
<Tool ID="Probe Stylus" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Type>Probing</Type>
<Cutter>
<Probe ID="11500" ParentID="" Type="Standard">
<SphereDiameter>5.00126</SphereDiameter>
<Height>101.6</Height>
<StemDiameter>2.99974</StemDiameter>
<Length>101.6</Length>
<MaxRPM>0</MaxRPM>
<StemRGB>-4144960</StemRGB>
<StickoutLength>76.2</StickoutLength>
<Alternate>off</Alternate>
</Probe>
<Probe ID="10455" ParentID="" Type="Cylinder">
<SphereDiameter>10</SphereDiameter>
<Height>10</Height>
<StemDiameter>3</StemDiameter>
<Length>50</Length>
<MaxRPM>0</MaxRPM>
<StemRGB>-4144960</StemRGB>
<StickoutLength>0</StickoutLength>
<Alternate>off</Alternate>
</Probe>
<Probe ID="11111" ParentID="" Type="Disk">
<SphereDiameter>20</SphereDiameter>
<Height>3</Height>
<Height2>5</Height2>
<Diameter2>3</Diameter2>
<PinOffset>8</PinOffset>
<StemDiameter>6</StemDiameter>
<Length>50</Length>
<MaxRPM>0</MaxRPM>
<StemRGB>-4144960</StemRGB>
<StickoutLength>0</StickoutLength>
<Alternate>off</Alternate>
</Probe>
</Cutter>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-127</Z>
</DrivenPoint>
</Tool>
<Tool ID="Polishers" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Type>Polisher</Type>
<Cutter>
<Apt ID="50" ParentID="" Type="FLAT END" PolishType="Polisher">
<D>38.1</D>
<R>0</R>
<E>0</E>
<F>0</F>
<A>0</A>
<B>0</B>
<H>127</H>
<StickoutLength>101.6</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>76.2</FluteLength>
<ShankDiameter>19.05</ShankDiameter>
<Alternate>off</Alternate>
</Apt>
<Apt ID="65" ParentID="" Type="BALL END" PolishType="Polisher">
<D>20</D>
<R>10</R>
<E>0</E>
<F>10</F>
<A>0</A>
<B>0</B>
<H>127</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>76.2</FluteLength>
<ShankDiameter>19.05</ShankDiameter>
<Alternate>off</Alternate>
</Apt>
<Apt ID="42" ParentID="" Type="BULL NOSE" PolishType="Polisher">
<D>10</D>
<R>2</R>
<E>3</E>
<F>2</F>
<A>0</A>
<B>0</B>
<H>127</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>76.2</FluteLength>
<ShankDiameter>19.05</ShankDiameter>
<Alternate>off</Alternate>
</Apt>
</Cutter>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-114.3</Z>
</DrivenPoint>
</Tool>
</Tools>
这是排序后的预期XML内容:
<?xml version="1.0"?>
<Tools>
<Tool ID="Parametric Mills" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Teeth>2</Teeth>
<Type>Milling</Type>
<Cutter>
<Apt ID="2" ParentID="" Type="BALL END" >
<D>12.7</D>
<R>6.35</R>
<E>0</E>
<F>6.35</F>
<A>0</A>
<B>0</B>
<H>88.9</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>50.8</FluteLength>
<Alternate>off</Alternate>
</Apt>
<Apt ID="33" ParentID="" Type="TAPERED BULL NOSE" >
<D>12.7</D>
<R>0</R>
<E>0</E>
<F>0</F>
<A>0</A>
<B>5</B>
<H>88.9</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>50.8</FluteLength>
<ShankDiameter>12.7</ShankDiameter>
<Alternate>off</Alternate>
</Apt>
<Apt ID="3000" ParentID="" Type="BULL NOSE" >
<D>12.7</D>
<R>2</R>
<E>4.35</E>
<F>2</F>
<A>0</A>
<B>0</B>
<H>88.9</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>50.8</FluteLength>
<Alternate>off</Alternate>
</Apt>
<Apt ID="10000" ParentID="" Type="FLAT END" >
<D>12.7</D>
<R>0</R>
<E>0</E>
<F>0</F>
<A>0</A>
<B>0</B>
<H>88.9</H>
<StickoutLength>63.5</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>50.8</FluteLength>
<Alternate>off</Alternate>
</Apt>
</Cutter>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-114.3</Z>
</DrivenPoint>
</Tool>
<Tool ID="Parametric Drills" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Teeth>2</Teeth>
<Type>HoleMaking</Type>
<Cutter>
<CenterDrill ID="3" ParentID="" DRILLMILL="FALSE" Type="CenterDrill" >
<ChamferAngle>60</ChamferAngle>
<H>50</H>
<PilotAngle>31</PilotAngle>
<D>3</D>
<PilotLength>3</PilotLength>
<ShankDiameter>12</ShankDiameter>
<StickoutLength>0</StickoutLength>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>11.69552</FluteLength>
<Alternate>off</Alternate>
</CenterDrill>
<Reamer ID="111" ParentID="" DRILLMILL="FALSE" Type="Reamer" >
<ChamferLength>0.5</ChamferLength>
<D>12</D>
<H>100</H>
<ShankDiameter>12</ShankDiameter>
<StickoutLength>0</StickoutLength>
<SpindleDirection>CW</SpindleDirection>
<MAXIMUMMATERIALREMOVAL>0</MAXIMUMMATERIALREMOVAL>
<FluteLength>63.5</FluteLength>
<Alternate>off</Alternate>
</Reamer>
<Apt ID="5000" ParentID="" Type="DRILL" >
<D>9.525</D>
<R>0</R>
<E>0</E>
<F>0</F>
<A>31</A>
<B>0</B>
<H>101.6</H>
<StickoutLength>76.2</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>63.5</FluteLength>
<Alternate>off</Alternate>
</Apt>
</Cutter>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-127</Z>
</DrivenPoint>
</Tool>
<Tool ID="Tool Holders" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Teeth>2</Teeth>
<Type>Turning</Type>
<Holder>
<Cylinder ID="1" ParentID="">
<Radius>50</Radius>
<Height>10</Height>
<NoSpin>0</NoSpin>
<Alternate>off</Alternate>
</Cylinder>
<Block ID="455" ParentID="">
<Width>25.4</Width>
<Length>25.4</Length>
<Height>101.6</Height>
<NoSpin>0</NoSpin>
<Alternate>off</Alternate>
</Block>
<Cone ID="50000" ParentID="">
<ButtomRadius>30</ButtomRadius>
<TopRadius>10</TopRadius>
<Height>50</Height>
<NoSpin>0</NoSpin>
<Alternate>off</Alternate>
</Cone>
</Holder>
</Tool>
<Tool ID="Probe Stylus" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Type>Probing</Type>
<Cutter>
<Probe ID="10455" ParentID="" Type="Cylinder">
<SphereDiameter>10</SphereDiameter>
<Height>10</Height>
<StemDiameter>3</StemDiameter>
<Length>50</Length>
<MaxRPM>0</MaxRPM>
<StemRGB>-4144960</StemRGB>
<StickoutLength>0</StickoutLength>
<Alternate>off</Alternate>
</Probe>
<Probe ID="11111" ParentID="" Type="Disk">
<SphereDiameter>20</SphereDiameter>
<Height>3</Height>
<Height2>5</Height2>
<Diameter2>3</Diameter2>
<PinOffset>8</PinOffset>
<StemDiameter>6</StemDiameter>
<Length>50</Length>
<MaxRPM>0</MaxRPM>
<StemRGB>-4144960</StemRGB>
<StickoutLength>0</StickoutLength>
<Alternate>off</Alternate>
</Probe>
<Probe ID="11500" ParentID="" Type="Standard">
<SphereDiameter>5.00126</SphereDiameter>
<Height>101.6</Height>
<StemDiameter>2.99974</StemDiameter>
<Length>101.6</Length>
<MaxRPM>0</MaxRPM>
<StemRGB>-4144960</StemRGB>
<StickoutLength>76.2</StickoutLength>
<Alternate>off</Alternate>
</Probe>
</Cutter>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-127</Z>
</DrivenPoint>
</Tool>
<Tool ID="Polishers" Units="Millimeter" Stack="FALSE">
<Force_data Input_lead="0" lead_dis="0.000000" helix_angle="0.000000" radial_rake="0.000000" rake_ball="0.000000" force_method="0" material="0" edge_type="0"
feed_limit="0.000000" chip_thickness="0.000000" force_limit="0.000000" power_limit="0.000000" plunge_feed="0" start_angle="0.000000" feed_drop="0.000000" cutoutput="0" force_resolution="0" force_resolution_distance="0.000000"
force_unit="1" force_cutchannel="0" force_ccstartangle="0.000000" force_ccfeedrop="0.000000" force_minfeedChange="0.000000" force_minfeedChange_def="1" force_mincutfeedrate="0.000000"
force_mincutfeedrate_def="1" force_aircutfeedrate="0.000000" force_aircutfeedrate_def="1" force_toolType="" force_edgeMaterial=""/>
<Type>Polisher</Type>
<Cutter>
<Apt ID="42" ParentID="" Type="BULL NOSE" PolishType="Polisher">
<D>10</D>
<R>2</R>
<E>3</E>
<F>2</F>
<A>0</A>
<B>0</B>
<H>127</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>76.2</FluteLength>
<ShankDiameter>19.05</ShankDiameter>
<Alternate>off</Alternate>
</Apt>
<Apt ID="50" ParentID="" Type="FLAT END" PolishType="Polisher">
<D>38.1</D>
<R>0</R>
<E>0</E>
<F>0</F>
<A>0</A>
<B>0</B>
<H>127</H>
<StickoutLength>101.6</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>76.2</FluteLength>
<ShankDiameter>19.05</ShankDiameter>
<Alternate>off</Alternate>
</Apt>
<Apt ID="65" ParentID="" Type="BALL END" PolishType="Polisher">
<D>20</D>
<R>10</R>
<E>0</E>
<F>10</F>
<A>0</A>
<B>0</B>
<H>127</H>
<StickoutLength>0</StickoutLength>
<R2>0</R2>
<E2>0</E2>
<F2>0</F2>
<SpindleDirection>CW</SpindleDirection>
<FluteLength>76.2</FluteLength>
<ShankDiameter>19.05</ShankDiameter>
<Alternate>off</Alternate>
</Apt>
</Cutter>
<DrivenPoint ID="1">
<Type>-1</Type>
<Radius>0</Radius>
<X>0</X>
<Y>0</Y>
<Z>-114.3</Z>
</DrivenPoint>
</Tool>
</Tools>
这是我正在使用的代码,但输出文件是bei ng作为单行返回 XML文件...我有点迷失了关于如何在标签“Apt”,“CenterDrill”,“Reamer”,“Cylinder”之后对包含ID属性的节点进行排序。 “块”,“型号”,“流水不腐”,“锥”,“探头”和其他几个人而不包含由“工具”或“DrivenPoint”标签之前的ID属性节点搞乱/节点。
我对这个解决方案进行了很多研究和搜索,但它们似乎都基于更简单的XML结构......我不介意为每种节点类型编写代码,下面在我的代码中尝试做一些与“探针”节点,但它不工作或者...我得到一个1kb的输出文件,其中只有一行...
有什么建议吗?
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml
Imports System.Xml.Linq
Public Class Form1
Private Function ReorderByMaterialThickness(ByRef inFile As String, ByRef outFile As String)
Try
Dim document As XElement = XElement.Load(inFile)
Dim sortedTables As XElement() = document.Elements("Probe").OrderBy(Function(t) CInt(t.Element("ID"))).ToArray()
document.ReplaceAll(sortedTables)
document.Save(outFile)
Catch ex As Exception
MsgBox("Something went wrong!")
End Try
Return Nothing
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ReorderByMaterialThickness("C:\Testes\Original.xml", "C:\Testes\Sorted.xml")
End Sub
End Class
如何使用专用于XML的技术?理想情况下,XSLT。 –
如果有人能指出我正确的方向,我很乐意学习它。目前我无法知道如何使用它... –
您可以尝试将此问题变成XSLT问题,而不是使用'xslt'来标记它。但之前:确保在这里包含一个最小的,完整的输入和输出文档样本,而不是链接和许多代码行。帮助:http://stackoverflow.com/help/mcve。请记住:我不知道vb.net中是否有简单的解决方案 - 可能会有一个。 –