ET中的评论:不仅仅是评论标签
Comments in ET: more than comment tag
我有一个 xml 文件,例如:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Chapter PUBLIC 'blub' 'blub.dtd'>
<Chapter>
<Tag>
<TagEntry y.validity.allowed="true" y.validity.mode="positive">
<!--Kommentar 1-->
<!--Kommentar 2-->
<!--Kommentar 3-->Inhalt 1<!--Kommentar 4--></TagEntry>
<TagEntry>
Inhalt 2 ergänzt <!--Kommentar 5-->mit Umlaut
</TagEntry>
<TagBase>
<!--Kommentar 6-->
<!--Kommentar 7-->Inhalt 3</TagBase>
<TagNothing>
Inhalt 3<!--Kommentar 8-->
</TagNothing>
</Tag>
</Chapter>
现在我想遍历评论。
我用 lxml.etree 作为 ET-tree:
comments = root.xpath('//comment()')
for comment in comments:
print(ET.tostring(comment))
但是它没有打印所有没有父节点文本的评论,而是打印了这个:
b'<!--Kommentar 1-->'
b'<!--Kommentar 2-->'
b'<!--Kommentar 3-->Inhalt 1'
b'<!--Kommentar 4-->'
b'<!--Kommentar 5-->mit Umlaut\n\t\t'
b'<!--Kommentar 6-->'
b'<!--Kommentar 7-->Inhalt 3'
b'<!--Kommentar 8-->\n\t\t'
有人可以向我解释一下为什么会发生这种情况以及我如何将 xpath 表达式更改为仅 return 注释节点而不将文本附加到注释末尾。
谢谢!
注释节点包含 tail
文本(默认;参见 https://lxml.de/api/lxml.etree-module.html#tostring)。
要去掉尾巴,改变
print(ET.tostring(comment))
到
print(ET.tostring(comment, with_tail=False))
如果您只对评论的内容而不是标记感兴趣,请使用:
print(comment.text)
我有一个 xml 文件,例如:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Chapter PUBLIC 'blub' 'blub.dtd'>
<Chapter>
<Tag>
<TagEntry y.validity.allowed="true" y.validity.mode="positive">
<!--Kommentar 1-->
<!--Kommentar 2-->
<!--Kommentar 3-->Inhalt 1<!--Kommentar 4--></TagEntry>
<TagEntry>
Inhalt 2 ergänzt <!--Kommentar 5-->mit Umlaut
</TagEntry>
<TagBase>
<!--Kommentar 6-->
<!--Kommentar 7-->Inhalt 3</TagBase>
<TagNothing>
Inhalt 3<!--Kommentar 8-->
</TagNothing>
</Tag>
</Chapter>
现在我想遍历评论。 我用 lxml.etree 作为 ET-tree:
comments = root.xpath('//comment()')
for comment in comments:
print(ET.tostring(comment))
但是它没有打印所有没有父节点文本的评论,而是打印了这个:
b'<!--Kommentar 1-->'
b'<!--Kommentar 2-->'
b'<!--Kommentar 3-->Inhalt 1'
b'<!--Kommentar 4-->'
b'<!--Kommentar 5-->mit Umlaut\n\t\t'
b'<!--Kommentar 6-->'
b'<!--Kommentar 7-->Inhalt 3'
b'<!--Kommentar 8-->\n\t\t'
有人可以向我解释一下为什么会发生这种情况以及我如何将 xpath 表达式更改为仅 return 注释节点而不将文本附加到注释末尾。
谢谢!
注释节点包含 tail
文本(默认;参见 https://lxml.de/api/lxml.etree-module.html#tostring)。
要去掉尾巴,改变
print(ET.tostring(comment))
到
print(ET.tostring(comment, with_tail=False))
如果您只对评论的内容而不是标记感兴趣,请使用:
print(comment.text)