首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用任何脚本(python/shell)自动插入和解析xml元素?

如何使用任何脚本(python/shell)自动插入和解析xml元素?
EN

Stack Overflow用户
提问于 2018-06-30 23:53:14
回答 1查看 153关注 0票数 1

这是链接中提出的问题的扩展:- How to insert sub-elements of xml tag at specific position using python script?

如果我在有Element Tree的地方使用python 3,它工作得很好。如果我没有Python3(因为我使用的当前版本是2.6,不能升级),我如何写xml_declaration标志为真的xml文件?似乎xml标志在解析时被移除了。基本上,我在解析xml时遇到了错误:

 org.xml.sax.SAXParseException; systemId: file:config.xml; lineNumber: 1; 
 columnNumber: 1; file:config.xml<Line 1, Column 1>: XML-20108: (Fatal Error) Start of root element expected.[[
    at oracle.xml.parser.v2.XMLError.flushErrorHandler(XMLError.java:425)
    at oracle.xml.parser.v2.XMLError.flushErrors1(XMLError.java:290)
    at oracle.xml.parser.v2.NonValidatingParser.parseRootElement(NonValidatingParser.java:476)
    at oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:417)
    at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:287)
    at oracle.ossmgmt.common.util.xml.XMLUtilityParser.validate(XMLUtilityParser.java:141)
    at oracle.ossmgmt.common.util.xml.XMLUtilityParser.initParse(XMLUtilityParser.java:256)
    at oracle.ossmgmt.common.util.xml.XMLUtility.initParse(XMLUtility.java:381)

我还尝试使用lxml :-

from lxml import etree as ET
param1='conf.xml'
tree = ET.parse(param1)
print(ET.getroot())
param2='Target'
target = tree.find(param2)
#print target.tag,target.attrib
seq = 'Attribute NAME="EFG" VALUE="1234"'
param3 = seq
temp = ET.Element(param3)
temp.tail = '\n'
target.insert(4,temp)
tree.write(param1, encoding='utf-8', xml_declaration=True)

但在这里我得到的错误是:-

Traceback (most recent call last):
File "b.py", line 10, in <module>
    temp = ET.Element(param3)
File "lxml.etree.pyx", line 2346, in lxml.etree.Element 
(src/lxml/lxml.etree.c:46617)
File "apihelpers.pxi", line 113, in lxml.etree._makeElement 
(src/lxml/lxml.etree.c:10475)
File "apihelpers.pxi", line 1405, in lxml.etree._tagValidOrRaise 
(src/lxml/lxml.etree.c:21541)
ValueError: Invalid tag name u'Attribute NAME="EFG" VALUE="1234"'
EN

回答 1

Stack Overflow用户

发布于 2018-07-01 02:38:34

我不太确定你想要的最终结构是什么,但是:

seq = 'Attribute NAME="EFG" VALUE="1234"'
param3 = seq
temp = ET.Element(param3)

最有可能是这样的:

seq = 'Attribute' 
#Create element <Attribute>
temp = ET.Element(seq)
#Set attributes of <Attribute>
temp.set("NAME","EFG") 
temp.set("VALUE","1234")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51116376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档