【问题标题】:Change text value with lxml使用 lxml 更改文本值
【发布时间】:2013-11-14 16:17:39
【问题描述】:

我有一个 xml 文件 - 这是一个 sn-p..

  <gmd_fileIdentifier>
    <gco_CharacterString>{0328cb65-b564-495a-b17e-e49e04864ab7}</gco_CharacterString>
 </gmd_fileIdentifier>
          <gmd_identifier>
            <gmd_RS_Identifier>
              <gmd_authority gco_nilReason="missing" />
              <gmd_code>
                <gco_CharacterString>0000</gco_CharacterString>
              </gmd_code>
              <gmd_codeSpace xmlns:gml="http://www.opengis.net/gml" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
                  <gco_CharacterString>test</gco_CharacterString>
                </gmd_codeSpace>
            </gmd_RS_Identifier>
          </gmd_identifier>

我要做的是将标签中当前的值 0000 更改为 gmd_fileIdentifier 字符串 {0328cb65-b564-495a-b17e-e49e04864ab7}。

我可以使用以下 python 代码访问这些值,但是如何设置该值? 当前代码

import os, sys
from lxml import etree

myXML = r"D:\test.xml"
tree = etree.parse(myXML)
root = tree.getroot()
root.xpath("//gmd_fileIdentifier/gco_CharacterString/text()")
print fileID
code = root.xpath("//gmd_identifier/gmd_RS_Identifier/gmd_code/gco_CharacterString/text()")
print code

谢谢

【问题讨论】:

    标签: python lxml


    【解决方案1】:

    您必须查询整个节点,而不仅仅是其内容:

    code = root.xpath('//gmd_identifier/gmd_RS_Identifier/gmd_code/gco_CharacterString')
    

    然后,如果匹配,只需替换其文本并保存回 XML 文件:

    if code:
        # Replaces <gco_CharacterString> text
        code[0].text = '{0328cb65-b564-495a-b17e-e49e04864ab7}'
        # Save back to the XML file
        etree.ElementTree(root).write('D:\test.xml', pretty_print=True)
    

    就是这样! :)

    【讨论】:

    • 我在 etree.ElementTree(tree) 行上收到以下错误“TypeError: Argument 'element' has wrong type (expected lxml.etree._Element, got lxml.etree._ElementTree)”。写('D:\test.xml', pretty_print=True)
    • @HalilSiddique 尝试将etree.ElementTree(tree) 更改为etree.ElementTree(root)。我在这里用稍微不同的代码进行了测试,很抱歉造成混淆!
    • @HalilSiddique 不客气!我很高兴能帮到你! :)
    猜你喜欢
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多