下面是一个例子:
require 'nokogiri' # v1.5.2
doc = Nokogiri.XML('<body><a name="foo">ick</a></body>')
puts doc.to_html
#=> <body><a name="foo">ick</a></body>
puts doc.to_xml
#=> <?xml version="1.0"?>
#=> <body>
#=> <a name="foo">ick</a>
#=> </body>
puts doc.to_xhtml
#=> <body>
#=> <a name="foo" id="foo">ick</a>
#=> </body>
注意已经创建的新id
属性。
1.谁来负责这件事,Nokogiri还是libxml2?
1.为什么会发生这种情况?(这是一个标准吗?))
- 我能找到的最接近的是这个规范,它描述了如何可以将
id
和name
属性设置为相同的值。*
1.如果希望在可能有<a name="foo">
的输入上使用to_xhtml
方法,有什么方法可以避免这种情况吗?
- 出现此问题的原因是,我正在解析某个输入,其中一个元素具有
id
属性,而另一个单独的元素具有name
属性,这两个属性发生冲突。*
2条答案
按热度按时间bjg7j2ky1#
it's a feature的libxml2在www.example.com中http://www.w3.org/TR/xhtml1/#h-4.10我们可以找到:
在XML中,片段标识符的类型为
ID
,每个元素只能有一个ID
类型的属性。因此,在XHTML 1.0中,id
属性被定义为ID
类型。为了确保XHTML 1.0文档是结构良好的XML文档,XHTML 1.0文档在上面列出的元素上定义片段标识符时必须使用id
属性。[...]
请注意,在XHTML 1.0中,这些元素的
name
属性已正式弃用,并将在XHTML的后续版本中删除。我想到的最好的“变通方法”是:
r7knjye22#
也许您可以为这些元素添加其他
id
值,以防止libxml添加自己的值。(显然,您需要确定如何为文档创建一个唯一的
id
值)。