Python:findall with xmlns前缀

时间:2015-01-25 11:10:26

标签: python xml

我有多个要解析的XML文档,它们都具有相同的元素名称,但每个文档都有自己独特的命名空间。

如何自行提取命名空间,因此我可以将其作为我的" findall"的前缀。环

例如,这是一个XML文件...

<ColorCorrectionCollection xmlns="urn:ASC:CDL:v1.2">
    <ColorCorrection id="af/af-123/neutral">
          <SOPNode>
               <Slope>2 1 1</Slope>
               <Offset>0 0 0</Offset>
               <Power>1 1 1</Power>
          </SOPNode>
          <SATNode>
               <Saturation>1</Saturation>
          </SATNode>
    </ColorCorrection>
    <ColorCorrection id="af/af-123/beauty">
          <SOPNode>
               <Slope>1.5 1.2 0.9</Slope>
               <Offset>0 0 0</Offset>
               <Power>1 1 1</Power>
          </SOPNode>
          <SATNode>
               <Saturation>0.8</Saturation>
          </SATNode>
    </ColorCorrection>

以下是启动示例代码...

import xml.etree.ElementTree as ET
tree = ET.parse(file)
root = tree.getroot()
for elem in root.findall("ColorCorrection"):
    # the above won't find anything,
    # as I need specify "{urn:ASC:CDL:v1.2}" as prefix.
    # how can I GET "{urn:ASC:CDL:v1.2}" into a variable?

1 个答案:

答案 0 :(得分:1)

我不知道你真正想做什么,但我想:

  • 您使用的是xml.etree.ElementTree,
  • 并且您想从变量xmlns中提取root值。

root.tag包含类似'{urn:ASC:CDL:v1.2}ColorCorrectionCollection'的字符串以及如何使用以下代码?

root.tag[:root.tag.find('}') + 1]
# => '{urn:ASC:CDL:v1.2}'