最近很多小伙伴都在问有没有办法从ElementTree元素获取行号和element获取选中行数据这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展cElementtree和Eleme
最近很多小伙伴都在问有没有办法从ElementTree元素获取行号和element获取选中行数据这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展cElementtree和ElementTree有什么区别?、ElementTree XPath-根据属性选择元素、ElementTree:Element.remove()跳跃迭代、Go 有没有办法获取源代码文件名和行号?等相关知识,下面开始了哦!
本文目录一览:- 有没有办法从ElementTree元素获取行号(element获取选中行数据)
- cElementtree和ElementTree有什么区别?
- ElementTree XPath-根据属性选择元素
- ElementTree:Element.remove()跳跃迭代
- Go 有没有办法获取源代码文件名和行号?
有没有办法从ElementTree元素获取行号(element获取选中行数据)
因此,我使用Python
3.2.1的cElementTree解析了一些XML文件,并且在解析过程中,我注意到某些标签缺少属性信息。我想知道是否有任何简单的方法来获取xml文件中这些元素的行号。
答案1
小编典典查看文档,我看不到使用cElementTree做到这一点。
但是,我对lxml的XML实现版本感到幸运。使用libxml2,它的替换量几乎下降了。元素具有sourceline
属性。(以及获得许多其他XML功能)。
唯一需要注意的是,我只在python 2.x中使用过它-不知道它在3.x下如何/是否工作-但可能值得一看。
附录:他们在首页上说:
lxml XML工具箱是C库libxml2和libxslt的Python绑定。它的独特之处在于它将这些库的速度和XML功能的完整性与本机Python
API的简单性结合在一起,该Python API大多数都兼容,但优于众所周知的ElementTree
API。最新版本适用于从2.3到3.2的所有CPython版本。有关lxml项目的背景和目标的更多信息,请参见简介。常见问题解答中回答了一些常见问题。
所以看起来python 3.x没问题。
cElementtree和ElementTree有什么区别?
我对dom有所了解,并且想了解ElementTree。Python
2.6具有ElementTree的较旧实现,但仍可用。但是,看起来它带有两个不同的类:xml.etree.ElementTree和xml.etree.cElementTree。请问有人能以他们的差异启发我吗?谢谢。
答案1
小编典典它是相同的库(相同的API,相同的功能),但是ElementTree是用Python实现的,而cElementTree是用C实现的。
如果可以,请使用C实现,因为它针对快速解析和低内存使用进行了优化,并且比Python实现快15到20倍。
如果您在有限的环境中使用Python版本(不允许加载C库)。
ElementTree XPath-根据属性选择元素
我在ElementTree中使用属性XPath Selector遇到麻烦,根据文档应该可以做到这一点
这是一些示例代码
XML格式
<root> <target name="1"> <a></a> <b></b> </target> <target name="2"> <a></a> <b></b> </target></root>
蟒蛇
def parse(document): root = et.parse(document) for target in root.findall("//target[@name=''a'']"): print target._children
我收到以下异常:
expected path separator ([)
答案1
小编典典您尝试使用的语法是 ElementTree 1.3中的
新增功能。
此类版本随 Python 2.7 或更高版本提供。如果您使用的是Python 2.6或更低版本,那么您仍然拥有ElementTree
1.2.6或更低版本。
ElementTree:Element.remove()跳跃迭代
我有这个xml输入文件:
<?xml version="1.0"?>
<zero>
<First>
<second>
<third-num>1</third-num>
<third-def>object001</third-def>
<third-len>458</third-len>
</second>
<second>
<third-num>2</third-num>
<third-def>object002</third-def>
<third-len>426</third-len>
</second>
<second>
<third-num>3</third-num>
<third-def>object003</third-def>
<third-len>998</third-len>
</second>
</First>
</zero>
我的目标是删除<third-def>
没有价值的任何第二层。为此,我编写了以下代码:
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
inputfile='inputfile.xml'
tree = ET.parse(inputfile)
root = tree.getroot()
elem = tree.find('First')
for elem2 in tree.iter(tag='second'):
if elem2.find('third-def').text == 'object001':
pass
else:
elem.remove(elem2)
#elem2.clear()
我的问题是elem.remove(elem2)
。它每隔第二级跳过一次。这是此代码的输出:
<?xml version="1.0" ?>
<zero>
<First>
<second>
<third-num>1</third-num>
<third-def>object001</third-def>
<third-len>458</third-len>
</second>
<second>
<third-num>3</third-num>
<third-def>object003</third-def>
<third-len>998</third-len>
</second>
</First>
</zero>
现在,如果我取消注释该elem2.clear()
行,则脚本可以完美运行,但是输出效果不佳,因为它保留了所有已删除的 第二级 :
<?xml version="1.0" ?>
<zero>
<First>
<second>
<third-num>1</third-num>
<third-def>object001</third-def>
<third-len>458</third-len>
</second>
<second/>
<second/>
</First>
</zero>
有人知道我的element.remove()
陈述为什么错误吗?
Go 有没有办法获取源代码文件名和行号?
在 C/C++ 中,您可以使用 __FILE__ 和 __LINE__ 来访问当前文件和行号。
Go 提供类似的东西吗?
正确答案
确实如此:
https://www.php.cn/link/c0e0b7080b94f208328b48cbea738d86
runtime.Caller也可用于获取调用函数的文件名/行号。
以上就是Go 有没有办法获取源代码文件名和行号?的详细内容,更多请关注php中文网其它相关文章!
关于有没有办法从ElementTree元素获取行号和element获取选中行数据的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于cElementtree和ElementTree有什么区别?、ElementTree XPath-根据属性选择元素、ElementTree:Element.remove()跳跃迭代、Go 有没有办法获取源代码文件名和行号?的相关知识,请在本站寻找。
本文标签: