python中的XML命名空间

时间:2017-08-02 05:03:36

标签: python xml xml-namespaces elementtree

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

  1. 瓦特:VAL = “FFFF00”
  2. 瓦特:VAL = “28”
  3. 宣言词
  4. 从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>
    

1 个答案:

答案 0 :(得分:0)

也可以使用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']

希望它有用。