【问题标题】:Remove ns0 from XML从 XML 中删除 ns0
【发布时间】:2016-12-07 02:42:44
【问题描述】:

我有一个 XML 文件,我想在其中编辑某些属性。我能够正确编辑属性,但是当我将更改写入文件时,标签上添加了一个奇怪的“ns0”。我怎样才能摆脱这个?这是我尝试过但没有成功的方法。我正在使用 Python 并使用 lxml。

    import xml.etree.ElementTree as ET
    from xml.etree import ElementTree as etree
    from lxml import etree, objectify
    frag_xml_tree = ET.parse(xml_name)
    frag_root = frag_xml_tree.getroot()

    for e in frag_root: 
        for elem in frag_root.iter(e):
            elem.attrib[frag_param_name] = update_val
        etree.register_namespace("", "http://www.w3.org/2001")
        frag_xml_tree.write(xml_name)

但是,当我这样做时,我只会收到错误 Invalid tag name u''。我认为如果 xml 标签以数字开头,则会出现此错误,但我的 xml 并非如此。我真的很困惑如何继续。谢谢

【问题讨论】:

  • 你使用的是什么 XML 库?
  • 你使用什么语言?
  • 我已更新帖子以包含信息。谢谢!
  • 请发布您的 XML。 ns0 几乎可以肯定是命名空间前缀,您可能实际上不需要删除它。
  • 谢谢你!你是对的。我使用了错误的命名空间

标签: python xml lxml


【解决方案1】:

实际上,这样做的方法似乎是两件事的结合。

  1. 导入语句为 import xml.etree.ElementTree as ET
  2. ET.register_namespace("", NAMESPACE) 是正确的调用,其中NAMESPACE 是输入xml 中列出的命名空间,即xmlns 之后的url。

【讨论】:

    【解决方案2】:

    这是仅使用xml.etree.ElementTree 而不是lxml 的更正代码:

    import xml.etree.ElementTree as ET
    frag_xml_tree = ET.parse(xml_name)
    frag_root = frag_xml_tree.getroot()
    
    for e in frag_root: 
        for elem in frag_root.iter(e):
            elem.attrib[frag_param_name] = update_val
        ET.register_namespace("", "http://www.w3.org/2001")
        frag_xml_tree.write(xml_name)
    

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 2023-01-24
      • 2014-04-20
      • 1970-01-01
      • 2020-10-05
      • 2014-10-05
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多