0

我正在尝试使用 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 标签?

谢谢

4

1 回答 1

1

从我在您的帖子中可以看到,您的解析器是命名空间感知的,并且抱怨 XML 命名空间别名没有被解析。假设这<wdtf:observationMember>是您最顶层的元素,那么您至少必须具备以下条件:

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

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

于 2013-04-04T02:56:52.470 回答