Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 2.7:访问XML中的注释_Python_Xml_Python 2.7_Elementtree - Fatal编程技术网

python 2.7:访问XML中的注释

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> <

我一直在使用ElementTree读取XML文件,并且能够正确解析XML。但我不知道如何阅读评论,尤其是在儿童语境很重要的地方。在这个特定的例子中,我喜欢阅读纽约的评论,即空气、公共汽车和小道是可导航的,并将其存储在字典中(名称:comment)

如果可以使用,则应该能够使用XPath选择comment()

这里有一个例子。我删除了名称空间前缀以简化它

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]