标签: elementtree

如何使用ElementTree获取元素的完整XML或HTML内容?

也就是说,所有文本和子标签,没有元素本身的标签?

<p>blah <b>bleh</b> blih</p>
Run Code Online (Sandbox Code Playgroud)

我想要

blah <b>bleh</b> blih
Run Code Online (Sandbox Code Playgroud)

element.text返回"blah",etree.tostring(element)返回:

<p>blah <b>bleh</b> blih</p>
Run Code Online (Sandbox Code Playgroud)

python xml api elementtree

10
推荐指数
2
解决办法
6881
查看次数

ElementTree元素索引查找

我正在使用该xml.etree.ElementTree模块从另一个结构化文档中使用Python 3.1创建XML文档.

我可以使用哪个ElementTree函数返回现有子元素的索引?

python elementtree

10
推荐指数
1
解决办法
9388
查看次数

如何防止xml.ElementTree fromstring删除commentnode

我有以下代码片段:

    from xml.etree.ElementTree import fromstring,tostring
    mathml = fromstring(input)
    for elem in mathml.getiterator():
        elem.tag = 'm:' + elem.tag
    return tostring(mathml)
Run Code Online (Sandbox Code Playgroud)

当我输入以下内容时input:

<math>
  <a> 1 2 3 </a>  <b />
<foo>Uitleg</foo>
<!-- <bar> -->
</math>
Run Code Online (Sandbox Code Playgroud)

它导致:

<m:math>
  <m:a> 1 2 3 </m:a>  <m:b />
<m:foo>Uitleg</m:foo>

</m:math>
Run Code Online (Sandbox Code Playgroud)

怎么会?我该如何保留评论?

编辑:我不关心使用的确切xml库,但是,我应该能够对标记进行粘贴更改.不幸的是,lxml似乎不允许这样(我不能使用正确的命名空间操作)

python xml elementtree

10
推荐指数
1
解决办法
6457
查看次数

如何使用Python的cElementTree创建<!DOCTYPE>

我试图在这个问题中使用答案,但无法使其工作:如何使用Python的ElementTree创建"虚拟根目录"?

这是我的代码:

import xml.etree.cElementTree as ElementTree
from StringIO import StringIO
s = '<?xml version=\"1.0\" encoding=\"UTF-8\" ?><!DOCTYPE tmx SYSTEM \"tmx14a.dtd\" ><tmx version=\"1.4a\" />'
tree = ElementTree.parse(StringIO(s)).getroot()
header = ElementTree.SubElement(tree,'header',{'adminlang': 'EN',})
body = ElementTree.SubElement(tree,'body')
ElementTree.ElementTree(tree).write('myfile.tmx','UTF-8')
Run Code Online (Sandbox Code Playgroud)

当我打开生成的'myfile.tmx'文件时,它包含以下内容:

<?xml version='1.0' encoding='UTF-8'?>
<tmx version="1.4a"><header adminlang="EN" /><body /></tmx>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?或者,有更好的工具吗?

python xml elementtree

10
推荐指数
2
解决办法
1万
查看次数

lxml etree.iterparse错误"TypeError:读取文件对象必须返回纯字符串"

我想使用lxml解析HTML文档.我正在使用python 3.2.3和lxml 2.3.4(http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml)

我正在使用etree.iterparse解析文档,但它返回以下运行时错误:

Traceback (most recent call last):
  File "D:\Eclipse Projects\Python workspace\Crawler\crawler.py", line 12, in <module>
    for event, elements in etree.iterparse(some_file_like):
  File "iterparse.pxi", line 491, in lxml.etree.iterparse.__next__ (src/lxml\lxml.etree.c:98565)
  File "iterparse.pxi", line 512, in lxml.etree.iterparse._read_more_events (src/lxml\lxml.etree.c:98768)
TypeError: reading file objects must return plain strings
Run Code Online (Sandbox Code Playgroud)

问题是:如何解决这个运行时错误?

非常感谢你.

这是代码:

from io import StringIO
from lxml import etree

some_file_like = StringIO("<root><a>data</a></root>")

for event, elements in etree.iterparse(some_file_like): #<-- Run-time error happens here
    print("%s, %4s, %s" % (event, elements.tag, elements.text))
Run Code Online (Sandbox Code Playgroud)

python lxml elementtree iterparse

10
推荐指数
1
解决办法
4740
查看次数

使用UTF-8输出时,Python ElementTree不会转换非中断空格

我正在尝试使用Python的ElementTree解析,操作和输出HTML:

import sys
from cStringIO  import StringIO
from xml.etree  import ElementTree as ET
from htmlentitydefs import entitydefs

source = StringIO("""<html>
<body>
<p>Less than &lt;</p>
<p>Non-breaking space &nbsp;</p>
</body>
</html>""")

parser = ET.XMLParser()
parser.parser.UseForeignDTD(True)
parser.entity.update(entitydefs)
etree = ET.ElementTree()

tree = etree.parse(source, parser=parser)
for p in tree.findall('.//p'):
    print ET.tostring(p, encoding='UTF-8')
Run Code Online (Sandbox Code Playgroud)

当我在Mac OS X 10.6上使用Python 2.7运行时,我得到:

<p>Less than &lt;</p>

Traceback (most recent call last):
  File "bar.py", line 20, in <module>
    print ET.tostring(p, encoding='utf-8')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xml/etree/ElementTree.py", line 1120, in tostring
    ElementTree(element).write(file, encoding, method=method)
  File …
Run Code Online (Sandbox Code Playgroud)

python xml encoding elementtree

10
推荐指数
2
解决办法
3955
查看次数

Python 2.7:类型对象"ElementTree"没有属性"register_namespace"

用这个python 2.7.3(或2.7.0)代码我想改变属性"android:versionCode ='2'"的值,它具有名称空间前缀"android":

#!/usr/bin/python
from xml.etree.ElementTree import ElementTree, dump
import sys, os

# Problem here:
ElementTree.register_namespace("android", "http://schemas.android.com/apk/res/android")

tree = ElementTree()
tree.parse("AndroidManifest.xml")
root = tree.getroot()
root.attrib["{http://schemas.android.com/apk/res/android}versionCode"] = "3"

dump(tree)
Run Code Online (Sandbox Code Playgroud)

如果不使用注释"Problem here"的代码行,ElementTree会自动将http://schemas.android.com/apk/res/android的名称空间别名命名为"ns0"(导致"ns0:versionCode = '3'".

因此,我使用ElementTree.register_namespace将命名空间url映射到别名"android",这将在此处记录.

我尝试这样做时得到的错误是:

AttributeError: type object 'ElementTree' has no attribute 'register_namespace'
Run Code Online (Sandbox Code Playgroud)

谁知道为什么这不起作用?这个方法应该在python 2.7中可用.

python xml elementtree

10
推荐指数
1
解决办法
2万
查看次数

从ElementTree获取属性名称和值

我有一个<root>具有多个属性的XML 元素.我一直在使用这个ElementTree包.

在我从xml文件中解析了一个树之后,我得到了文档根目录,但我希望得到所请求的属性,甚至是整个属性列表.

<root a="1" b="2" c="3">
    </blablabla>
</root>
Run Code Online (Sandbox Code Playgroud)

如何<root>使用ElementTree 检索元素的所有属性名称和值?

python xml elementtree xmlroot

10
推荐指数
2
解决办法
2万
查看次数

无法使用默认命名空间编写XML文件

我正在编写一个Python脚本来更新Visual Studio项目文件.它们看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" 
      xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
      ...
Run Code Online (Sandbox Code Playgroud)

以下代码读取然后写入文件:

import xml.etree.ElementTree as ET

tree = ET.parse(projectFile)
root = tree.getroot()
tree.write(projectFile,
           xml_declaration = True,
           encoding = 'utf-8',
           method = 'xml',
           default_namespace = "http://schemas.microsoft.com/developer/msbuild/2003")
Run Code Online (Sandbox Code Playgroud)

Python在最后一行抛出错误,说:

ValueError: cannot use non-qualified names with default_namespace option
Run Code Online (Sandbox Code Playgroud)

这是令人惊讶的,因为我只是在阅读和写作,中间没有编辑.Visual Studio拒绝加载没有默认命名空间的XML文件,因此省略它不是可选的.

为什么会出现此错误?建议或替代方案欢迎.

python xml elementtree

10
推荐指数
1
解决办法
9149
查看次数

Pylint错误消息:"E1101:模块'lxml.etree'没有'strip_tags'成员'"

我正在尝试使用lxml和python第一次进行个人项目,我试图使用etree.strip_tags()从一些源代码中删除标签.

出于某种原因,我不断收到错误消息:"E1101:模块'lxml.etree'没有'strip_tags'成员'".

我不确定为什么会这样.

这是我的代码的相关部分:

from lxml import etree

...

DOC = etree.strip_tags(DOC_URL, 'html')
print DOC
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢.

python lxml pylint elementtree

10
推荐指数
1
解决办法
4215
查看次数

标签 统计

elementtree ×10

python ×10

xml ×7

lxml ×2

api ×1

encoding ×1

iterparse ×1

pylint ×1

xmlroot ×1