2013-04-04 81 views
0

我想从python的xml文件中检查和提取一些数据。我用那么etree通过元素循环解析这样做:用值解析xsd [python]

import xml.etree.ElementTree as etree 
    root = etree.fromstring(xml_string) 

for element in root.iter(): 
    print("%s , %s , %s" % (element.tag, element.attrib, element.text)) 

这对于一些测试数据正常工作,但我的工作实际的XML文件似乎包含与数据一起XSD标签。下面是一个例子

<wdtf:observationMember> 
    <wdtf:TimeSeriesObservation gml:id="ts1"> 
    <gml:description>Reading using DTW (Depth To Water) from TOC</gml:description> 
    <gml:name codeSpace="http://www.bom.gov.au/std/water/xml/wio0.2/feature/TimeSeriesObservation/w00066/12/A/GroundWaterLevel/">1</gml:name> 
    <om:procedure xlink:href="#gwTOC12" /> 
    <om:observedProperty xlink:href="http://www.bom.gov.au/std/water/xml/wio0.2/property//bom/GroundWaterLevel_m" /> 
    <om:featureOfInterest xlink:href="http://www.bom.gov.au/std/water/xml/wio0.2/feature/BorePipeSamplingInterval/w00066/12" /> 
    <wdtf:metadata> 
     <wdtf:TimeSeriesObservationMetadata> 
     <wdtf:regulationProperty>Reg200806.s3.2a</wdtf:regulationProperty> 
     <wdtf:status>validated</wdtf:status> 
     </wdtf:TimeSeriesObservationMetadata> 
    </wdtf:metadata> 
    <wdtf:result> 
     <wdtf:TimeSeries> 
     <wdtf:defaultInterpolationType>InstVal</wdtf:defaultInterpolationType> 
     <wdtf:defaultUnitsOfMeasure>m</wdtf:defaultUnitsOfMeasure> 
     <wdtf:defaultQuality>quality-A</wdtf:defaultQuality> 
     <wdtf:timeValuePair time="1915-12-09T12:00:00+10:00">51.82</wdtf:timeValuePair> 
     <wdtf:timeValuePair time="1917-12-18T12:00:00+10:00">41.38</wdtf:timeValuePair> 
     <wdtf:timeValuePair time="1924-05-23T12:00:00+10:00">21.95</wdtf:timeValuePair> 
     <wdtf:timeValuePair time="1988-02-02T12:00:00+10:00">7.56</wdtf:timeValuePair> 
     </wdtf:TimeSeries> 
    </wdtf:result> 
    </wdtf:TimeSeriesObservation> 
</wdtf:observationMember> 

在上面的代码中导致etree期运用这个XML返回一个错误:

Traceback (most recent call last): 
File "xml_test2.py", line 38, in <module> 
root = etree.fromstring(xml_string) 
File "<string>", line 124, in XML 
ParseError: unbound prefix: line 1, column 4 

是否有不同的解析器,我应该使用?或者我可以删除xsc标签吗?

感谢

+1

请张贴实际的错误信息。 – 2013-04-04 01:42:47

+0

嗨麦克我得到的erroro是:回溯(最近通话最后一个): 文件 “xml_test2.py” 38行,在 根= etree.fromstring(xml_string) 文件 “”,线路124,在XML ParseError:未绑定前缀:第1行第4列 – jprockbelly 2013-04-04 01:58:41

+0

您是从文件加载XML吗?如果你是你应该使用'root = etree.parse(“myfile.xsd”)。getroot()“'而不是'root = etree.fromstring(xml_string)'。 – 2013-04-04 02:45:22

回答

1

从我可以在您的文章看,您的解析器感知名称空间,并抱怨说,XML命名空间的别名都没有解决。假设<wdtf:observationMember>是您最顶端的元素,那么你必须具备以下至少:

<wdtf:observationMember xmlns:wdtf="some-uri"> 

这同样适用于所有其他前缀,如gmlom

+0

感谢Petru,认为现在我已经整理出来了,我正在将观察成员从一个更大的xml块中剪下来,并错过了名称空间 – jprockbelly 2013-04-04 04:28:42