我已经盯住了这个问题。lxml将“<”转换为<。为什么?
我将XML封装的HTML数据存入Atlassian Confluence。对于我需要添加span标签的标签。但不管我如何尝试,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)
此输入:
<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>
这是输出:
<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 href="http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz">8.21</a></td>None
<td><span>one tag</span><a href="http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz">8.21</a></td>None
no
<td>no tags</td>None
<td><span>one tag</span></td>None
正如你所看到的 - 标签内部是未触及过的,而我是被转换的。我无法理解这个错误。
为什么我的文本转换已完成,而未改变现有文本?
好点。我还没有找到如何添加这个新的标签,围绕td标签的所有内容。那就是:foo => foo。它可以在纯文本框中使用,但当包含其他标签时会失败,如,
等。 – bos
@bos:您可以在新的“span”中使用'span.insert(index,elem)''元素将*现有元素移动到跨度中。将循环结合到'td'的现有子元素上,您可以立即将所有元素移动到一个跨度中。 :-) –