gpt4 book ai didi

ruby - 在不转换实体的情况下使用 Nokogiri 调整 IE 条件注释

转载 作者:数据小太阳 更新时间:2023-10-29 08:51:40 26 4
gpt4 key购买 nike

我有一个带有 HTML5 Shiv 的 XHTML 文件在头部:

<!--[if lt IE 9]>
<script src='../common/html5.js' type='text/javascript'></script>
<![endif]-->

使用 Nokogiri我需要调整该评论中的路径,剥离 ../ .但是,对 .content 的任何更改注释节点的 XML 输出将 > 转换为和 <对实体:

XML = <<ENDXML
<r><!--[if lt IE 9]>
<script src='../common/html5.js' type='text/javascript'></script>
<![endif]--></r>
ENDXML

require 'nokogiri'
doc = Nokogiri.XML(XML)
comment = doc.at_xpath('//comment()')
comment.content = comment.content.sub('../','')
puts comment.to_xml
#=> <!--[if lt IE 9]&gt;
#=> &lt;script src='common/html5.js' type='text/javascript'&gt;&lt;/script&gt;
#=> &lt;![endif]-->

原始来源是有效的 XML/XHTML。我怎样才能让 Nokogiri 在调整期间不转换此评论中的实体?

最佳答案

Nokogiri docs for content=说:

The string gets XML escaped, not interpreted as markup.

因此,与其使用它,不如使用 replace 将节点替换为新节点和一个显式创建的 comment node :

XML = <<ENDXML
<r><!--[if lt IE 9]>
<script src='../common/html5.js' type='text/javascript'></script>
<![endif]--></r>
ENDXML

require 'nokogiri'
doc = Nokogiri.XML(XML)
comment = doc.at_xpath('//comment()')

# this line is the new one, replacing comment.content= ...
comment.replace Nokogiri::XML::Comment.new(doc, comment.content.sub('../',''))

# note `comment` is the old comment, so to see the changes
# look at the whole document
puts doc.to_xml

输出是:

<?xml version="1.0"?>
<r>
<!--[if lt IE 9]>
<script src='common/html5.js' type='text/javascript'></script>
<![endif]-->
</r>

关于ruby - 在不转换实体的情况下使用 Nokogiri 调整 IE 条件注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11315362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com