GVKun编程网logo

有没有办法从ElementTree元素获取行号(element获取选中行数据)

4

最近很多小伙伴都在问有没有办法从ElementTree元素获取行号和element获取选中行数据这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展cElementtree和Eleme

最近很多小伙伴都在问有没有办法从ElementTree元素获取行号element获取选中行数据这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展cElementtree和ElementTree有什么区别?、ElementTree XPath-根据属性选择元素、ElementTree:Element.remove()跳跃迭代、Go 有没有办法获取源代码文件名和行号?等相关知识,下面开始了哦!

本文目录一览:

有没有办法从ElementTree元素获取行号(element获取选中行数据)

有没有办法从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有什么区别?

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-根据属性选择元素

我在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()跳跃迭代

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 有没有办法获取源代码文件名和行号?

Go 有没有办法获取源代码文件名和行号?

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 有没有办法获取源代码文件名和行号?的相关知识,请在本站寻找。

本文标签: