删除nokogiri名称空间属性

时间:2018-10-31 18:03:49

标签: ruby xpath namespaces nokogiri

我有一个文件作为EPUB软件包的一部分,其内容如下:

<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">

我正在尝试完全删除xmlns:opf属性。可能会像这样工作:

@doc.xpath("//xmlns:metadata).remove_attr("xmlns:opf")

我知道我在命名空间中混用了一些东西,因为它们不返回内容:

@doc.css("metadata")[0]["xmlns:opf"]  => nil
@doc.css("metadata")[0].attributes => {}

所以我改为尝试使用xpath并像这样声明名称空间:

@doc.at_xpath('//xmlns:metadata', "xmlns"=>"http://www.idpf.org/2007/opf").attributes
@doc.at_xpath('//xmlns:metadata', "xmlns"=>"http://www.idpf.org/2007/opf", "opf"=>"http://www.idpf.org/2007/opf")
@doc.at_xpath('//xmlns:metadata[@xmlns:opf]', "xmlns"=>"http://www.idpf.org/2007/opf", "opf"=>"http://www.idpf.org/2007/opf")

,但是所有这三个仍然返回空值。我知道我在这里写的一些东西是完全错误的,但是最终我只希望最终产品是:

<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">

编辑:它是一个“ .opf”文件,该文件被解析为XML并以标准方式打开:

@doc = File.open("file.opf") { |f| Nokogiri::XML(f) }

我无法发布整个文件,但这是任何epub一部分的标准OPF文件。文件的开头是:

<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="id">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">

文件的其余部分只是一个OPF <item>节点的列表。

0 个答案:

没有答案