ruby - 如何使用 Nokogiri 从 XML 中删除元素
问题描述
鉴于此 HTML:
<products>
<product>
<name> product1 </name>
<price> 21 </price>
</product>
<product>
<name> product2 </name>
<price> 0 </price>
</product>
<product>
<name> product3 </name>
<price> 10 </price>
</product>
</products>
我想使用 Nokogiri 重新创建一个 XML 文件,但我想删除“产品价格 = 0”的元素,所以它看起来像:
<products>
<product>
<name> product1 </name>
<price> 21 </price>
</product>
<product>
<name> product3 </name>
<price> 10 </price>
</product>
</products>
我尝试了很多东西,但似乎没有任何效果。
解决方案
这是更惯用的 Nokogiri 和 Ruby 代码:
require 'nokogiri'
xml =<<EOT
<products>
<product>
<name> product1 </name>
<price> 21 </price>
</product>
<product>
<name> product2 </name>
<price> 0 </price>
</product>
<product>
<name> product3 </name>
<price> 10 </price>
</product>
</products>
EOT
doc = Nokogiri::XML(xml)
# strip the offending nodes
doc.xpath('//product/price[text()=" 0 "]/..').remove
此时生成的 XML 如下所示:
doc.to_xml
# => "<?xml version=\"1.0\"?>\n" +
# "<products>\n" +
# " <product>\n" +
# " <name> product1 </name>\n" +
# " <price> 21 </price>\n" +
# " </product>\n" +
# " \n" +
# " <product>\n" +
# " <name> product3 </name>\n" +
# " <price> 10 </price>\n" +
# " </product>\n" +
# " </products>\n"
然后简单地write
说:
File.write('myfile.xml', doc.to_xml)
推荐阅读
- nunit - 提升事件
> : 无法使用提供的参数引发事件 - javascript - 如何在闪亮中创建部分可编辑的数据表?
- python - Python 与主代码并行运行函数
- c# - 使用百分比创建对象动画
- java - 如何将 Maven 项目外部的文件添加到 ZIP 发行版?
- c# - 如何在 .net wpf 应用程序中支持来自精密触摸板的 2 指捏合/缩放手势?
- r - R:来自 e1071 预测的 svm 因“概率”参数设置而异
- python - Pandas:按项目在 DataFrame 中出现的次数过滤列
- python - 如何在不抓取文档本身的情况下从网页获取文件的下载链接?
- python-2.7 - 用于在树莓派上自动更改 crontab 启动的 Python 脚本