簡體   English   中英

Python,XML解析和Elementtree

[英]Python, XML parsing, and Elementtree

我在這里搞砸了嗎?

我無法獲得任何結果。 我確定我在做一些愚蠢的事情。 我不是程序員,這讓我發瘋。 試圖學習,但是大約8個小時后,我感到頭暈。

這是我的XML的示例:

<?xml version="1.0"?>

-<MyObjectBuilder_Sector xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- Saved '2014-08-23T15:28:07.8585220-05:00' with SEToolbox version '1.44.14.2' -->


-<Position>

<X>0</X>

<Y>0</Y>

<Z>0</Z>

</Position>


-<SectorEvents>


-<Events>


-<MyObjectBuilder_GlobalEventBase>


-<DefinitionId>

<TypeId>MyObjectBuilder_GlobalEventDefinition</TypeId>

<SubtypeId>SpawnCargoShip</SubtypeId>

</DefinitionId>

<Enabled>false</Enabled>

<ActivationTimeMs>401522</ActivationTimeMs>

</MyObjectBuilder_GlobalEventBase>

</Events>

</SectorEvents>

<AppVersion>1044014</AppVersion>


-<SectorObjects>


-<MyObjectBuilder_EntityBase xsi:type="MyObjectBuilder_VoxelMap">

<EntityId>72248529206701361</EntityId>

<PersistentFlags>CastShadows InScene</PersistentFlags>


-<PositionAndOrientation>

<Position z="-466" y="-8987" x="-95"/>

<Forward z="-1" y="0" x="0"/>

<Up z="0" y="1" x="0"/>

</PositionAndOrientation>

<Filename>BaseAsteroid.vox</Filename>

</MyObjectBuilder_EntityBase>


-<MyObjectBuilder_EntityBase xsi:type="MyObjectBuilder_VoxelMap">

<EntityId>72151252176979970</EntityId>

<PersistentFlags>CastShadows InScene</PersistentFlags>


-<PositionAndOrientation>

<Position z="-11301.9033" y="-1183.70569" x="-2126.84"/>

<Forward z="-1" y="0" x="0"/>

<Up z="0" y="1" x="0"/>

</PositionAndOrientation>

<Filename>asteroid0.vox</Filename>

</MyObjectBuilder_EntityBase>


-<MyObjectBuilder_EntityBase xsi:type="MyObjectBuilder_VoxelMap">

<EntityId>72108197145016458</EntityId>

<PersistentFlags>CastShadows InScene</PersistentFlags>


-<PositionAndOrientation>

<Position z="355.7873" y="18738.05" x="1064.912"/>

<Forward z="-1" y="0" x="0"/>

<Up z="0" y="1" x="0"/>

</PositionAndOrientation>

<Filename>asteroid1.vox</Filename>

</MyObjectBuilder_EntityBase>

這是我的代碼,它根本找不到任何東西... :(

from xml.etree import cElementTree as ElementTree

    ElementTree.register_namespace('xsi', 'http://www.w3.org/2001/XMLScheme-instance')
    namespace = {'xsi': 'http://www.w3.org/2001/XMLScheme-instance'} 

    xmlPath = 'e:\\test.xml'
    xmlRoot = ElementTree.parse(xmlPath).getroot()

    #why this no return anything
    results = xmlRoot.findall(".//SectorObjects/MyObjectBuilder_EntityBase[@xsi:type='MyObjectBuilder_VoxelMap']", namespaces=namespace)
    print(results)

您的問題是“我在這里搞砸了嗎?” 首先,您的XML本身有問題,似乎您無法正確地將其粘貼到此處。 我做了幾件事使它可行。

1)添加以下行,因為它們不在XML中:

</SectorObjects>
</MyObjectBuilder_Sector>

2)findall函數未使用命名參數“ namespaces”,並且xsi部分也給出了錯誤(SyntaxError:在前綴映射中找不到前綴“ xsi”)。 因此,我將通話更改為:

results = xmlRoot.findall(".//SectorObjects/MyObjectBuilder_EntityBase")

當我運行具有上述更改的代碼時,得到的輸出如下:

[<Element 'MyObjectBuilder_EntityBase' at 0x025028A8>, <Element 'MyObjectBuilder_EntityBase' at 0x02502CC8>, <Element 'MyObjectBuilder_EntityBase' at 0x02502E18>]

如果您想做更多事情,例如獲取EntityId的值,則可以執行以下操作:

results = xmlRoot.findall(".//SectorObjects/MyObjectBuilder_EntityBase")
try:
    for result in results:
        print result.find('EntityId').text
except AttributeError as aE:
    print str(aE)

輸出:

72248529206701361
72151252176979970
72108197145016458

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM