我有点惊讶的是,使用双斜杠作为注释似乎是有效的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 '
有人能指出允许这样做的规范吗?
答案 0 :(得分:5)
不,comments 只能在XML中为<!-- comment -->
。您看到//this is a valid comment
为 文字 ,mixed content中的元素之间允许这样做。你可以很容易地遗漏//
。
ET.tostring(e)
正在返回e.tail
(e
之后出现的文字)作为其e
字符串表示的一部分。这可能会令人困惑,因为大多数人都希望ET.tostring(e)
严格返回e
元素的某些字符串值,而不包括其文本节点兄弟。但是,由于e.tail
是ET元素数据结构的一部分,我认为ET的设计者也认为包括e.tail
也是合理的。
答案 1 :(得分:2)
这不是有效的评论,而是<root>
元素的文本节点。
<child2></child2> //this is a valid comment
将被视为
... element-node(&#34; child2&#34;),text-node(&#34; //这是一个有效的注释\ n&#34;),element-node(&#34; child3&#34)...
你想要的是
<child2></child2> <!-- this is a valid comment -->
将转换为真正的 XML-comment-node
... element-node(&#34; child2&#34;),comment-node(&#34; //这是一个有效的评论&#34;),element-node(&#34; child3&# 34)...
(为简单起见,我省略了空文本节点。)
答案 2 :(得分:0)
<!--This is a valid comment-->
您需要以这种方式发表评论。同样的方式注释在HTML中形成。