我有一个ASCII文本文件,其中包含XML部分。文件结构如下:
text...
text...
<note1>
<date>2015-09-01</date>
<hour>08:30</hour>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note1>
text...
text...
<note2>
<date>2015-09-01</date>
<hour>08:30</hour>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note2>
text...
text...
如何逐步浏览文件并查找XML部分并使用ElementTree
,或者更容易将XML部分存储到自己的XML文件中?因此,文件1将为file1.xml
,其中包含以下内容:
<note1>
<date>2015-09-01</date>
<hour>08:30</hour>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note1>
然后文件2将是file2.xml
,其中包含以下内容:
<note2>
<date>2015-09-01</date>
<hour>08:30</hour>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note2>
答案 0 :(得分:1)
天真的做法就是这样......
首先,使用内置python file handler打开文件。这将允许您读取,写入和创建新的文本文件。您只需要命名新文件SELECT Z.NAME,
CASE WHEN Z.CONSEQ_AVAIL >= 3 THEN 1 ELSE 0 END AS YOUR_FLAG
FROM
(
SELECT A.NAME,
SUM(CASE WHEN B.ADATE >= A.ADATE AND B.ADATE <= A.ADATE + 2 THEN 1 ELSE 0 END) AS CONSEQ_AVAIL
FROM
TABL_A A INNER JOIN TABL_A B
ON A.NAME = B.NAME AND A.AVAILABLE = 'Y' AND B.AVAILABLE = 'Y'
GROUP BY A.NAME
) Z;
以将其另存为xml文件。
其次,您逐行遍历目标文件并搜索file#.xml
xml代码的开头。您还需要存储标记中包含的字符串的值。当您从这里开始时,您开始将每一行写入新的xml文件。然后,每次在文件中找到<>
时,都会检查发起搜索的字符串值。您可能还想验证是否有结束标记指示符<>
。一旦你点击结束标记并添加它,你就完成了第一个xml文件。
您继续搜索/
并基本上重复第二步并创建一个新的xml文件。您对整个输入文件执行此操作。
这种天真实现的缺点是,如果您的普通文本包含一组<>
,则可能会导致错误。还必须很好地形成每个文件的初始和最终xml标记。
我认为不需要将xml数据存储在<>
中。
答案 1 :(得分:1)
BeautifulSoup可以很好地处理格式错误的XML。在这里你可以做到:
from bs4 import BeautifulSoup
with open(textfilename) as fd:
soup = BeautifulSoup(fd)
n1 = soup.findChild() # extract first full XML element, here <node1>...</node1>
while n1:
# process the XML element
...
n1 = n1.findNextSibling() # extract next full XML element