使用值[python]解析xsd

时间:2013-04-04 01:40:38

标签: python xml xsd

我正在尝试使用python检查并从xml文件中提取一些数据。我这样做是通过使用etree解析然后循环遍历元素:

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>

在上面的代码中使用此xml会导致etree返回错误:

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 个答案:

答案 0 :(得分:1)

从我在帖子中看到的内容,您的解析器可识别名称空间,并抱怨XML名称空间别名未得到解析。假设<wdtf:observationMember>是您最重要的元素,那么您必须至少拥有以下内容:

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

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