簡體   English   中英

如何使用LXML或BeautifulSoup從CDATA標記中刪除但保留Python中的實際數據

[英]How would one remove the CDATA tags from but preserve the actual data in Python using LXML or BeautifulSoup

我正在解析一些XML,其中使用BeautifulSoup作為解析器。 我使用以下代碼提取CDATA,但我只需要數據而不是CDATA標記。

    myXML = open("c:\myfile.xml", "r")
    soup = BeautifulSoup(myXML)
    data = soup.find(text=re.compile("CDATA"))

    print data

    <![CDATA[TEST DATA]]>

我想看看是否有以下輸出:

測試數據

我不在乎解決方案是在LXML還是BeautifulSoup中。 只想要最好或最簡單的方法來完成工作。 謝謝!


這是一個解決方案:

    parser = etree.XMLParser(strip_cdata=False)
    root = etree.parse(self.param1, parser)
    data = root.findall('./config/script')
    for item in data:  # iterate through list to find text contained in elements containing CDATA
        print item.text

基於lxml docs

>>> from lxml import etree
>>> parser = etree.XMLParser(strip_cdata=False)
>>> root = etree.XML('<root><data><![CDATA[test]]></data></root>', parser)
>>> data = root.findall('data')
>>> for item in data:  # iterate through list to find text contained in elements containing CDATA
    print item.text

test  # just the text of <![CDATA[test]]>

這可能是完成工作的最佳方法,具體取決於您的xml結構對該方法的適應程度。

基於BeautifulSoup:

>>> str='<xml>  <MsgType><![CDATA[text]]></MsgType>  </xml>'
>>> soup=BeautifulSoup(str, "xml") 
>>> soup.MsgType.get_text()
u'text'
>>> soup.MsgType.string
u'text'
>>> soup.MsgType.text
u'text'

結果,它只打印msgtype中的文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM