Python 使用lxml提取所有元素事先未知的数据

Python 使用lxml提取所有元素事先未知的数据,python,parsing,lxml,sgml,Python,Parsing,Lxml,Sgml,我有一些大致标准化的sgml文件。但是,在打开文件并亲自阅读之前,可能存在我不知道存在的标记中包含的数据。例如,文件有地址,通常地址有街道、城市、州、邮政编码和电话。地址的每个元素都用标记表示 <ADDRESS> <STREET>One Main Street <CITY>Gotham City <ZIP>99999 0123 <PHONE>555-123-5467 </ADDRESS> 但我得到的是有问题的,

我有一些大致标准化的sgml文件。但是,在打开文件并亲自阅读之前,可能存在我不知道存在的标记中包含的数据。例如,文件有地址,通常地址有街道、城市、州、邮政编码和电话。地址的每个元素都用标记表示

 <ADDRESS>
 <STREET>One Main Street
 <CITY>Gotham City
 <ZIP>99999 0123
 <PHONE>555-123-5467
 </ADDRESS>
但我得到的是有问题的,因为我无法确定一个元素在哪里结束,下一个元素从哪里开始

One Main StreetGotham City99999 0123555-123-5467

为了获得所有标签,我们通过如下方式浏览文档:

<ADDRESS>
 <STREET>One Main Street</STREET>
 <CITY>Gotham City</CITY>
 <ZIP>99999 0123</ZIP>
 <PHONE>555-123-5467</PHONE>
 </ADDRESS>
>>> for tags in root.iter():
...     print tags.text
... 

One Main Street
One Second Street
Gotham City
99999 0123
555-123-5467
USA
假设您的XML结构如下所示:

<ADDRESS>
 <STREET>One Main Street</STREET>
 <CITY>Gotham City</CITY>
 <ZIP>99999 0123</ZIP>
 <PHONE>555-123-5467</PHONE>
 </ADDRESS>
>>> for tags in root.iter():
...     print tags.text
... 

One Main Street
One Second Street
Gotham City
99999 0123
555-123-5467
USA
现在假设您的XML也有额外的标记;您不知道的标签。由于我们正在迭代XML,上面的代码也将返回这些标记

<ADDRESS>
         <STREET>One Main Street</STREET>
         <STREET1>One Second Street</STREET1>
        <CITY>Gotham City</CITY>
         <ZIP>99999 0123</ZIP>
         <PHONE>555-123-5467</PHONE>         
         <COUNTRY>USA</COUNTRY>    
</ADDRESS>
现在,如果我们想要得到标签的文本,过程是相同的。只需打印tag.text,如下所示:

<ADDRESS>
 <STREET>One Main Street</STREET>
 <CITY>Gotham City</CITY>
 <ZIP>99999 0123</ZIP>
 <PHONE>555-123-5467</PHONE>
 </ADDRESS>
>>> for tags in root.iter():
...     print tags.text
... 

One Main Street
One Second Street
Gotham City
99999 0123
555-123-5467
USA

那么你想得到文件中的所有标签吗?是和否。首先得到一个文件中的所有标签会很好,但我也想得到文件中的地址部分中的所有标签我很困惑-你的输入是SGML,但是您接受了一个涉及解析XML的答案——您是否找到了一种先将SGML转换为XML的方法?如果是这样,我可以用你的技巧!:)谢谢,我很感激。这很有帮助