我在网页上有以下 xml -
<entry>
<id>1750</id>
<title>variablename</title>
<source>
com.tidalsoft.webclient.tes.dsp.db.datatypes.Variable
</source>
<tes:variable>
<tes:ownername>ownergroup</tes:ownername>
<tes:productiondate>2015-08-17T00:00:00-0400</tes:productiondate>
<tes:readonly>N</tes:readonly>
<tes:publish>N</tes:publish>
<tes:description>
Decription Here
</tes:description>
<tes:startcalendar>0</tes:startcalendar>
<tes:ownerid>666</tes:ownerid>
<tes:type>1</tes:type>
<tes:lastusermodifiedtime>2015-06-15T15:42:27-0400</tes:lastusermodifiedtime>
<tes:innervalue>\\share\location</tes:innervalue>
<tes:calc>N</tes:calc>
<tes:name>variablename</tes:name>
<tes:startdate>1899-12-30T00:00:00-0500</tes:startdate>
<tes:pub>Y</tes:pub>
<tes:lastvalue>\\share\location</tes:lastvalue>
<tes:id>1750</tes:id>
<tes:startdateasstring>18991230000000</tes:startdateasstring>
<tes:lastchangetime>2015-06-15T15:42:27-0400</tes:lastchangetime>
<tes:clientcachelastchangetime>2015-08-17T09:56:49-0400</tes:clientcachelastchangetime>
</tes:variable>
</entry>
Run Code Online (Sandbox Code Playgroud)
我正在尝试解析这些数据。我有一个通过请求 -
r = requests.get(url, auth=('username', 'password'))
Run Code Online (Sandbox Code Playgroud)
但是当我尝试解析内容时出现错误。
>>> xmlObject = etree.parse(r.content)
Traceback (most recent call last):
File "apiTest.py", line 46, in <module>
xmlObject = etree.parse(r.content)
File "lxml.etree.pyx", line 3310, in lxml.etree.parse (src\lxml\lxml.etree.c:7
2517)
File "parser.pxi", line 1791, in lxml.etree._parseDocument (src\lxml\lxml.etre
e.c:105979)
File "parser.pxi", line 1817, …Run Code Online (Sandbox Code Playgroud) 寻找这个问题的解决方案有一段时间了,因为文档并不是很清楚。
我最终使用了下面的方法,并认为我会分享回来。
我很好奇将单个项目列表转换为字符串的高效/Pythonic 实现是什么。我正在使用lxmlapi,特别xpath是它返回 a listof Elements。
假设我有以下 xml
<Root>
<Name>MyName</Name>
<Comment>MyComment</Comment>
<Details>
<Value>1</Value>
</Details>
</Root>
Run Code Online (Sandbox Code Playgroud)
现在我想检索 的值a = xpath('Comment/text()')(假设上下文节点是Root)。我可以使用以下之一。
strExample = a[0]
Run Code Online (Sandbox Code Playgroud)
或者
strExample = ''.join(a)
Run Code Online (Sandbox Code Playgroud)
我认为前者会(稍微)更有效率。就可读性和效率而言,其中之一或某种替代方法是首选方法。
我已经盯着这个问题视而不见了.
我正在将XML封装的HTML数据融入Atlassian Confluence.对于-tags,我需要添加span-tag.但无论我如何尝试,lxml-lib分别将我的<和>转换为<和>.但是,转换仅适用于我的新标签,其中的任何现有标签都可以不受影响!
看看这个Python代码:
for x in doc.iter():
if x.tag == "td":
print x.text
x.text = "no tags"
print etree.dump(x)
x.text = "<span>one tag</span>"
print etree.dump(x)
Run Code Online (Sandbox Code Playgroud)
对于此输入:
<tr>
<td>apa</td>
<td>1.2</td>
<td>
<a href="http://korv.com/apa.tar.gz">3.4</a>
</td>
<td>no</td>
</tr>
<tr>
<td>coreutils</td>
<td>6.12</td>
<td>
<a href="http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz">8.21</a>
</td>
<td>no</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
这是输出:
<td>no tags</td>None
<td><span>one tag</span></td>None
1.2
<td>no tags</td>None
<td><span>one tag</span></td>None
None
<td>no tags<a href="http://korv.com/apa.tar.gz">3.4</a></td>None
<td><span>one tag</span><a href="http://korv.com/apa.tar.gz">3.4</a></td>None
no
<td>no tags</td>None
<td><span>one tag</span></td>None
coreutils
<td>no tags</td>None
<td><span>one tag</span></td>None
6.12
<td>no tags</td>None
<td><span>one tag</span></td>None
None
<td>no tags<a …Run Code Online (Sandbox Code Playgroud) 这是一个使用带有大量子元素的三引号f-string的函数:
def pass_empty_string(param):
from lxml import etree
xml = etree.XML(f'''
<root>
<child>text</child>
<child>{param}</child>
...
</root>''')
return xml
Run Code Online (Sandbox Code Playgroud)
获得或重视</child>时param是否可以获得空元素?None''