【发布时间】:2016-03-29 01:26:17
【问题描述】:
首先祝大家节日快乐!好的,所以我最近开始了一个新项目,该项目需要我处理一个庞大的 XML 文件,大约 20k 行并且很难使用,因为它没有排序并且导致节点中出现很多重复的属性,我想要解决这个问题。使用 XSLT + Notepad++ 应该会让这件事变得简单,除非我很难找到有关 XSLT 排序的信息,因为您不知道每个属性及其格式如<property name="" />。
文件的样子:
<Items>
<item id="1">
<prop name="c">
<prop name="a">
<event name="c">
<event name="a">
<prop class="b">
<prop name="a">
<prop name="c">
</prop>
<prop class="a">
<prop name="b">
<prop name="a">
</prop>
</item>
</items>
我希望文件是什么样子的:
<Items>
<item id="1">
<prop name="a">
<prop name="b">
<event name="a">
<event name="c">
<prop class="a">
<prop name="a">
<prop name="c">
</prop>
<prop class="b">
<prop name="a">
<prop name="b">
</prop>
</item>
</items>
我只想通过属性的值来整理<prop name..>,然后在<prop class>中进行同样的事情
-- 更新-- 好的,所以我不想发布实际 xml 的一部分,因为它通常很容易交换代码,但是我在过去的几个小时里一直在玩这个,似乎无法让它工作。
这里来自 XML 的三种不同类型的项目。
<block id="1" name="stone">
<property name="Material" value="stone"/>
<property name="Shape" value="Terrain"/>
<property name="Mesh" value="terrain"/>
<property name="Texture" value="1"/>
<property name="Weight" value="100"/>
<property name="DropScale" value="2"/>
<property name="LPHardnessScale" value="2"/>
<drop event="Harvest" name="rockSmall" count="125"/>
<drop event="Harvest" name="ironFragment" count="5"/>
<drop event="Destroy" name="rockSmall" count="50"/>
<drop event="Fall" name="destroyedStone" count="1" prob="1.0" stick_chance=".75"/>
</block>
<block id="154" name="metalReinforcedWoodWedge60">
<property name="Material" value="metal"/>
<property name="Shape" value="Wedged60Full"/>
<property name="Texture" value="380"/>
<property name="Collide" value="movement,rocket,melee"/>
<property name="FuelValue" value="100"/>
<drop event="Destroy" name="woodDebris" count="1"/>
<property name="CanMobsSpawnOn" value="false"/>
<drop event="Fall" name="woodDebris" count="1" prob="1.0" stick_chance=".75"/>
<property class="UpgradeBlock">
<property name="ToBlock" value="scrapIronWedge60"/>
<property name="Item" value="scrapIron"/>
<property name="ItemCount" value="10"/>
<property name="UpgradeHitCount" value="4"/>
</property>
<property name="DowngradeBlock" value="reinforcedWoodWedge60"/>
<property class="RepairItems">
<property name="scrapIron" value="10"/>
</property>
<property name="Group" value="Building,Basics"/>
</block>
<block id="1146" name="cottonYoung">
<property name="Class" value="PlantGrowing"/>
<property name="Material" value="plants"/>
<property name="Shape" value="BillboardPlant"/>
<property name="Mesh" value="grass"/>
<property name="Texture" value="20"/>
<property name="Collide" value="melee"/>
<property name="CanDecorateOnSlopes" value="true"/>
<property name="IsTerrainDecoration" value="true"/>
<property class="PlantGrowing">
<property name="Next" value="cotton"/>
<property name="GrowthRate" value="60"/>
<property name="IsRandom" value="false"/>
<property name="FertileLevel" value="1"/>
</property>
</block>
【问题讨论】:
-
你能解释一下你想对数据中的哪个值进行排序吗?对于您发布的示例,结果会如何(好吧,如果您首先将其修复为格式良好的 XML)?
-
您尚未关闭单个
prop元素。是否有<prop name="b"/><event name="c"/><prop name="a"/>,然后您是否想将prop元素与name属性组合在一起,例如得到<prop name="a"/><prop name="b"/><event name="c"/>?还是只想对相邻的prop和event元素进行排序? -
如今,随着 XML 的发展,20K 行已经非常少了。