Nokogiri如何替换DTD路径?
How replace DTD path Nokogiri?
我正在打开一个包含以下内容的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE relatos PUBLIC "-//SINCODH/DTD relatos 0.97" "relatos.dtd">
<relatos>
</relatos>
现在,我想为新的 dtd 替换 DOCTYPE 标签:
<!DOCTYPE relatos SYSTEM "test/dummy/public/midtd.dtd">
我正在尝试这个,但似乎首先我需要删除现有的 dtd 标签:
docnoko = Nokogiri::XML(doc)
docnoko.create_internal_subset("relatos", nil, "test/dummy/public/midtd.dtd")
嗯,通常 Nokogiri 可以很容易地替换节点或删除节点并添加其他内容,但这需要一些变通方法:
require 'nokogiri'
old_doc = Nokogiri::XML(<<EOT)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE relatos PUBLIC "-//SINCODH/DTD relatos 0.97" "relatos.dtd">
<relatos>
<foo />
<bar />
</relatos>
EOT
创建新文档:
new_doc = Nokogiri::XML('<relatos/>')
看起来像这样:
new_doc.to_xml # => "<?xml version=\"1.0\"?>\n<relatos/>\n"
然后添加新的 DTD:
new_doc.create_internal_subset('relatos', nil, 'test/dummy/public/midtd.dtd')
然后将旧文档中的节点附加到新文档中:
new_doc.at('relatos').children = old_doc.at('relatos').children
导致:
new_doc.to_xml # => "<?xml version=\"1.0\"?>\n<!DOCTYPE relatos SYSTEM \"test/dummy/public/midtd.dtd\">\n<relatos>\n <foo/>\n <bar/>\n</relatos>\n"
这是一个代码块:
require 'nokogiri'
old_doc = Nokogiri::XML(<<EOT)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE relatos PUBLIC "-//SINCODH/DTD relatos 0.97" "relatos.dtd">
<relatos>
<foo />
<bar />
</relatos>
EOT
new_doc = Nokogiri::XML('<relatos/>')
new_doc.create_internal_subset('relatos', nil, 'test/dummy/public/midtd.dtd')
new_doc.at('relatos').children = old_doc.at('relatos').children
您可能会在 Nokogiri-Talk 列表或他们的 IRC 频道上提问,因为那里有真正聪明的人。
我正在打开一个包含以下内容的 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE relatos PUBLIC "-//SINCODH/DTD relatos 0.97" "relatos.dtd">
<relatos>
</relatos>
现在,我想为新的 dtd 替换 DOCTYPE 标签:
<!DOCTYPE relatos SYSTEM "test/dummy/public/midtd.dtd">
我正在尝试这个,但似乎首先我需要删除现有的 dtd 标签:
docnoko = Nokogiri::XML(doc)
docnoko.create_internal_subset("relatos", nil, "test/dummy/public/midtd.dtd")
嗯,通常 Nokogiri 可以很容易地替换节点或删除节点并添加其他内容,但这需要一些变通方法:
require 'nokogiri'
old_doc = Nokogiri::XML(<<EOT)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE relatos PUBLIC "-//SINCODH/DTD relatos 0.97" "relatos.dtd">
<relatos>
<foo />
<bar />
</relatos>
EOT
创建新文档:
new_doc = Nokogiri::XML('<relatos/>')
看起来像这样:
new_doc.to_xml # => "<?xml version=\"1.0\"?>\n<relatos/>\n"
然后添加新的 DTD:
new_doc.create_internal_subset('relatos', nil, 'test/dummy/public/midtd.dtd')
然后将旧文档中的节点附加到新文档中:
new_doc.at('relatos').children = old_doc.at('relatos').children
导致:
new_doc.to_xml # => "<?xml version=\"1.0\"?>\n<!DOCTYPE relatos SYSTEM \"test/dummy/public/midtd.dtd\">\n<relatos>\n <foo/>\n <bar/>\n</relatos>\n"
这是一个代码块:
require 'nokogiri'
old_doc = Nokogiri::XML(<<EOT)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE relatos PUBLIC "-//SINCODH/DTD relatos 0.97" "relatos.dtd">
<relatos>
<foo />
<bar />
</relatos>
EOT
new_doc = Nokogiri::XML('<relatos/>')
new_doc.create_internal_subset('relatos', nil, 'test/dummy/public/midtd.dtd')
new_doc.at('relatos').children = old_doc.at('relatos').children
您可能会在 Nokogiri-Talk 列表或他们的 IRC 频道上提问,因为那里有真正聪明的人。