【问题标题】:XML Namespace in pythonpython中的XML命名空间
【发布时间】:2017-08-02 05:03:35
【问题描述】:

我需要获得一些价值,例如

  1. w:val="FFFF00"
  2. w:val="28"
  3. 声明词

来自xml文件,请帮我写代码

我已经尝试过这段代码

import xml.etree.ElementTree as ET
tree = ET.parse('document.xml')
# root = tree.getroot()
ns={'w':'http://schemas.openxmlformats.org/wordprocessingml/2006/main'}

for char in tree.findall('w:color',ns):
        print(' |-->', char.text)

请帮助我编写代码我如何在 python 中使用 xml 命名空间来获取价值
这是 XML 代码:-

<w:tc>
    <w:tcPr>
        <w:tcW w:w="1502" w:type="dxa"/>
    </w:tcPr>
    <w:p w:rsidP="00065164" w:rsidRDefault="006F598E" w:rsidRPr="009D1FCD" w:rsidR="006F598E">
        <w:pPr>
            <w:autoSpaceDE w:val="0"/>
            <w:autoSpaceDN w:val="0"/>
            <w:adjustRightInd w:val="0"/>
            <w:jc w:val="center"/>
            <w:rPr>
                <w:rFonts w:cstheme="minorHAnsi"/>
                <w:b/>
                <w:color w:val="FFFF00"/>
            </w:rPr>
        </w:pPr>
        <w:r w:rsidRPr="009D1FCD">
            <w:rPr>
                <w:rFonts w:cstheme="minorHAnsi"/>
                <w:b/>
                <w:color w:val="FFFF00"/>
            </w:rPr>
            <w:t>YEAR</w:t>
        </w:r>
    </w:p>
</w:tc>

<w:p w:rsidP="00443849" w:rsidRDefault="00104308" w:rsidRPr="00383A2A" w:rsidR="00104308">
    <w:pPr>
        <w:pStyle w:val="NoSpacing"/>
        <w:rPr>
            <w:rFonts w:cstheme="minorHAnsi"/>
            <w:b/>
            <w:sz w:val="28"/>
            <w:szCs w:val="28"/>
        </w:rPr>
    </w:pPr>
    <w:r w:rsidRPr="00383A2A">
        <w:rPr>
            <w:rFonts w:cstheme="minorHAnsi"/>
            <w:b/>
            <w:sz w:val="28"/>
            <w:szCs w:val="28"/>
        </w:rPr>
        <w:t>Declaration:</w:t>
    </w:r>
</w:p>

【问题讨论】:

  • &lt;w:color&gt; 不是根的子元素,所以需要提供路径,例如tree.findall('.//w:color', ns) 在文档中的任意位置查找 w:color
  • 好的,可以直接找到w:color
  • 使用我上面描述的路径。注意:ws:color 没有text,也许你的意思是得到attribs。
  • 无需添加根元素即可提取任意属性值
  • @AChampion 我试过了,但效果很好

标签: python xml xml-namespaces elementtree


【解决方案1】:

也可以使用xml.dom 模块提取数据。 这是代码:

from xml.dom import expatbuilder
document = expatbuilder.parse("sample.xml", False)
node = document.getElementsByTagName('w:p')
for i in node:
    color_list =  i.getElementsByTagName('w:color')
    wvalue_data =  [d.getAttribute('w:val') for d in color_list ]
    if  wvalue_data:
        print "color w:val :" , wvalue_data
    desc_list = i.getElementsByTagName('w:t')
   print "desc   :" ,[node.firstChild.data for node in desc_list]
    wsz_data = i.getElementsByTagName('w:sz')
    value_data = [data.getAttribute('w:val') for data in wsz_data ]
    if value_data:
        print "w:sz_value :" , value_data

输出如下:

color w:val : [u'FFFF00', u'FFFF00']
desc   : [u'YEAR']
desc   : [u'Declaration:']
w:sz_value : [u'28', u'28']

希望有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2017-08-14
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    相关资源
    最近更新 更多