python 2.7:访问XML中的注释
我一直在使用ElementTree读取XML文件,并且能够正确解析XML。但我不知道如何阅读评论,尤其是在儿童语境很重要的地方。在这个特定的例子中,我喜欢阅读纽约的评论,即空气、公共汽车和小道是可导航的,并将其存储在字典中(名称:comment) 如果可以使用,则应该能够使用XPath选择comment() 这里有一个例子。我删除了名称空间前缀以简化它python 2.7:访问XML中的注释,python,xml,python-2.7,elementtree,Python,Xml,Python 2.7,Elementtree,我一直在使用ElementTree读取XML文件,并且能够正确解析XML。但我不知道如何阅读评论,尤其是在儿童语境很重要的地方。在这个特定的例子中,我喜欢阅读纽约的评论,即空气、公共汽车和小道是可导航的,并将其存储在字典中(名称:comment) 如果可以使用,则应该能够使用XPath选择comment() 这里有一个例子。我删除了名称空间前缀以简化它 from lxml import etree xml = """ <st> <fa> <
from lxml import etree
xml = """
<st>
<fa>
<name>NY</name>
<den>3</den>
<!-- ignore me -->
<metro>true</metro>
<!-- air, bus, train all available -->
<access>air</access>
</fa>
</st>
"""
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.fromstring(xml, parser=parser)
city_access_d = {}
for city in tree.xpath(".//fa"):
name = city.xpath("name")[0].text
comment = city.xpath("comment()[following-sibling::node()[1][self::access]]")[0]
city_access_d[name] = comment.text.strip()
print city_access_d
如果出于某种原因不想创建XMLParser,也可以使用以下XPath
comment = city.xpath("comment()[following-sibling::node()[not(self::text())][1][self::access]]")[0]
看见在Python3.8中,更容易阅读和保存注释:浏览了它们,但它们与保存注释更相关。我只是不知道如何读取注释并将其存储在变量中。我对elementtree有基本的了解。我没有用Python 2.7做过,但在保留注释节点的树中,肯定有办法识别这些节点并获取它们的文本内容(就像Python 3.8的链接答案一样)。“尤其是在子上下文很重要的情况下。”这是什么意思?你能使用lxml吗?使用lxml,您应该能够使用XPath选择正确的注释。如果您想让我添加一个示例,请告诉我。
from lxml import etree
xml = """
<st>
<fa>
<name>NY</name>
<den>3</den>
<!-- ignore me -->
<metro>true</metro>
<!-- air, bus, train all available -->
<access>air</access>
</fa>
</st>
"""
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.fromstring(xml, parser=parser)
city_access_d = {}
for city in tree.xpath(".//fa"):
name = city.xpath("name")[0].text
comment = city.xpath("comment()[following-sibling::node()[1][self::access]]")[0]
city_access_d[name] = comment.text.strip()
print city_access_d
{'NY': 'air, bus, train all available'}
comment = city.xpath("comment()[following-sibling::node()[not(self::text())][1][self::access]]")[0]