我已經盯住了這個問題。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'的現有子元素上,您可以立即將所有元素移動到一個跨度中。 :-) –