【问题标题】:Replace specific XML attribute value替换特定的 XML 属性值
【发布时间】:2020-05-07 13:44:46
【问题描述】:

我浏览了互联网,但找不到我的问题的有效答案。如果它是size="10.439"to size="10.238",我需要替换 XML 文件属性值。基本上,我需要在整个 XML 文件中更改该数字。所以代码是:

import lxml.etree as etree
import re
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse('fe3.xml', parser)
re.sub(r'size="10.439"','size="10.238"', tree)

但它不起作用,我必须做什么才能让它起作用?

如果有帮助,size 属性位于 XML 的标签 text 中。像这样:

<pages>
<page>
<textbox>
<text size = "10.439"> hello
</text>
</textbox>
</page>
</pages>

【问题讨论】:

  • 这里不需要任何正则表达式。 re.sub(r'size="10.439"','size="10.238"', tree)tree.replace(r'size="10.439"','size="10.238"') 相同。请注意,您没有在替换后将值分配给变量。
  • 我得到 AttributeError: 'lxml.etree._ElementTree' 对象没有属性 'replace'
  • 这就是您所说的“不起作用”。您只能使用带有字符串的正则表达式。您需要使用 XML 解析器获取所需的属性并根据需要设置值,而不是针对 XML 结构使用正则表达式。
  • 我是XML新手,不知道怎么做,因为我必须在条件下更改它
  • 查看here 示例。

标签: python python-3.x xml lxml elementtree


【解决方案1】:

我的肮脏解决方案:

tree = etree.parse('fe3.xml', parser)
tree = etree.tostring(tree).replace(b'size="10.439"', b'size="10.238"')

【讨论】:

    【解决方案2】:

    我又来了:)

    from simplified_scrapy import SimplifiedDoc,req,utils
    html = '''
    <pages>
    <page>
    <textbox>
    <text size = "10.439"> hello
    </text>
    </textbox>
    </page>
    </pages>
    '''
    doc = SimplifiedDoc(html)
    text = doc.select('text')
    if text.size=='10.439':
      text.setAttr('size','10.238')
    print (doc.html)
    

    结果:

    <pages>
    <page>
    <textbox>
    <text size="10.238"> hello
    </text>
    </textbox>
    </page>
    

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      相关资源
      最近更新 更多