2016-05-13 70 views
0

我想在footnote.text之前插入reverse_html作爲footnote的第一個元素但失敗。在文本的開頭插入元素

我該怎麼做?

#!/usr/bin/env python3 

from unittest import TestCase, TestProgram 

class T(TestCase): 
    def test(self): 
     try: 
      from lxml.etree import fromstring, tostring, XMLParser 
     except ImportError: 
      raise 
     p_start = r'<p id="n1">' 
     p_text = r'description' 
     p_end = r'</p>' 
     p = p_start + p_text + p_end 
     a = r'<a href="#r1">^</a>' 
     parser = XMLParser(remove_blank_text=True) 
     footnote, reverse_href = (fromstring(xml, parser) for xml in (p, a)) 
     self._transform(footnote, reverse_href) 
     expected = self._expected(p_start, p_text, p_end, a) 
     gotten = tostring(footnote).strip().decode() 
     self.assertEqual(expected, gotten) 
    @staticmethod 
    def _transform(footnote, reverse_href): 
     footnote.text = ' ' + footnote.text 
     footnote.insert(0, reverse_href) 
    @staticmethod 
    def _expected(p_start, p_text, p_end, a): 
     return p_start + a + ' ' + p_text + p_end 

if __name__ == r'__main__': 
    TestProgram() 

回答

0

「我想footnote.text之前插入reverse_html作爲footnote第一元件」

lxml.etree模型,這意味着移動footnote.texttailreverse_html的:

def _transform(footnote, reverse_href): 
    reverse_href.tail = footnote.text 
    footnote.text = '' 
    footnote.insert(0, reverse_href) 

結果:

>>> print etree.tostring(footnote).strip().decode() 
<p id="n1"><a href="#r1">^</a>description</p>