[英]Extracting comments from XML file in Python
我想提取 XML 文件的注釋部分。 我想提取的信息在標簽之間找到,然后在“示例”的文本標簽中找到。
XML 文件的結構如下所示。
<Boxes>
<Box Id="3" ZIndex="13">
<Shape>Rectangle</Shape>
<Brush Id="0" />
<Pen>
<Color>#FF000000</Color>
</Pen>
<Tag><?xml version="1.0"?>
<PFDComment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Text>**EXAMPLE** </Text>
</PFDComment></Tag>
</Box>
</Boxes>
我在下面嘗試了一些東西,但無法獲得我想要的信息。
def read_cooments(xml):
tree = lxml.etree.parse(xml)
Comments= {}
for comment in tree.xpath("//Boxes/Box"):
#
get_id = comment.attrib['Id']
Comments[get_id] = []
for group in comment.xpath(".//Tag"):
#
Comments[get_id].append(group.text)
df_name1 = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in Comments.items()]))
任何人都可以幫助從上面顯示的 XML 文件中提取注釋嗎? 任何幫助表示贊賞!
使用下面給出的代碼:
def read_comments(xml):
tree = etree.parse(xml)
rows= []
for box in tree.xpath('Box'):
id = box.attrib['Id']
tagTxt = box.findtext('Tag')
if tagTxt is None:
continue
txtNode = etree.XML(tagTxt).find('Text')
if txtNode is None:
continue
rows.append([id, txtNode.text.strip()])
return pd.DataFrame(rows, columns=['id', 'Comment'])
請注意,如果您在函數內創建 DataFrame,則它是該函數的局部變量,從外部是不可見的。 一個更好、更易讀的方法(就像我所做的那樣)是該函數返回這個 DataFrame。
當Box元素不包含Tag子元素或Tag不包含任何Text子元素時,此函數還在 2 個地方包含continue以防止可能的“錯誤情況”。
我還注意到沒有必要替換<
或>
用<
或>
用我自己的代碼,因為lxml自己執行它。
我的測試如下:開始表單導入:
import pandas as pd
from lxml import etree
我使用了一個包含以下內容的文件:
<Boxes>
<Box Id="3" ZIndex="13">
<Shape>Rectangle</Shape>
<Brush Id="0" />
<Pen>
<Color>#FF000000</Color>
</Pen>
<Tag><?xml version="1.0"?>
<PFDComment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Text>**EXAMPLE** </Text>
</PFDComment></Tag>
</Box>
</Boxes>
我調用了上面的函數:
df_name1 = read_comments('Boxes.xml')
當我打印df_name1 時,我得到:
id Comment
0 3 **EXAMPLE**
如果出現問題,請使用上述函數的“擴展”版本,並帶有測試打印輸出:
def read_comments(xml):
tree = etree.parse(xml)
rows= []
for box in tree.xpath('Box'):
id = box.attrib['Id']
tagTxt = box.findtext('Tag')
if tagTxt is None:
print('No Tag element')
continue
txtNode = etree.XML(tagTxt).find('Text')
if txtNode is None:
print('No Text element')
continue
txt = txtNode.text.strip()
print(f'{id}: {txt}')
rows.append([id, txt])
return pd.DataFrame(rows, columns=['id', 'Comment'])
並查看打印輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.