双斜杠 (//) 作为 XML 注释
Double slash (//) as XML comment
我有点惊讶,使用双斜杠作为注释似乎是有效的 XML。
以下使用 Python 和 xml.etree.ElementTree
以及 xmllint --format
正确解析:
<root>
<child1>text1</child1>
<child2></child2> //this is a valid comment
<child3></child3>
</root>
我最初认为这可以被视为根元素的文本节点,但在 python3 上尝试证明我错了:
>>> import xml.etree.ElementTree as ET
>>> r=ET.parse("test.xml").getroot()
>>> r.text
'\n '
>>> child2=r[1]
>>> child2.text
>>> ET.tostring(child2)
b'<child2 /> //this is a valid comment\n '
谁能告诉我允许这样做的规范?
<!--This is a valid comment-->
你需要这样写评论。在 HTML 中形成评论的方式相同。
这不是有效的评论,而是 <root>
元素的文本节点。
<child2></child2> //this is a valid comment
将被视为
...element-node("child2"), text-node(" //this is a valid comment\n"), element-node("child3")...
你想要的是
<child2></child2> <!-- this is a valid comment -->
这将转化为 真实 XML-评论节点
...element-node("child2"), comment-node(" //this is a valid comment"), element-node("child3")...
(为简单起见,我省略了空文本节点。)
XML 说明
不,comments can only be <!-- comment -->
in XML. You're seeing //this is a valid comment
as text, which is allowed between elements in mixed content。您可以很容易地忽略 //
.
Python 元素树解释
ET.tostring(e)
是 returning e.tail
(出现在 e
之后的文本)作为其 e
字符串表示的一部分。这可能会造成混淆,因为大多数人会期望 ET.tostring(e)
到 return 严格地是 e
元素的一些字符串值,而不包括其文本节点兄弟。但是,由于 e.tail
是 ET 元素数据结构的一部分,我想 ET 的设计者也认为包含 e.tail
是合理的。
我有点惊讶,使用双斜杠作为注释似乎是有效的 XML。
以下使用 Python 和 xml.etree.ElementTree
以及 xmllint --format
正确解析:
<root>
<child1>text1</child1>
<child2></child2> //this is a valid comment
<child3></child3>
</root>
我最初认为这可以被视为根元素的文本节点,但在 python3 上尝试证明我错了:
>>> import xml.etree.ElementTree as ET
>>> r=ET.parse("test.xml").getroot()
>>> r.text
'\n '
>>> child2=r[1]
>>> child2.text
>>> ET.tostring(child2)
b'<child2 /> //this is a valid comment\n '
谁能告诉我允许这样做的规范?
<!--This is a valid comment-->
你需要这样写评论。在 HTML 中形成评论的方式相同。
这不是有效的评论,而是 <root>
元素的文本节点。
<child2></child2> //this is a valid comment
将被视为
...element-node("child2"), text-node(" //this is a valid comment\n"), element-node("child3")...
你想要的是
<child2></child2> <!-- this is a valid comment -->
这将转化为 真实 XML-评论节点
...element-node("child2"), comment-node(" //this is a valid comment"), element-node("child3")...
(为简单起见,我省略了空文本节点。)
XML 说明
不,comments can only be <!-- comment -->
in XML. You're seeing //this is a valid comment
as text, which is allowed between elements in mixed content。您可以很容易地忽略 //
.
Python 元素树解释
ET.tostring(e)
是 returning e.tail
(出现在 e
之后的文本)作为其 e
字符串表示的一部分。这可能会造成混淆,因为大多数人会期望 ET.tostring(e)
到 return 严格地是 e
元素的一些字符串值,而不包括其文本节点兄弟。但是,由于 e.tail
是 ET 元素数据结构的一部分,我想 ET 的设计者也认为包含 e.tail
是合理的。