首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用libxml-ruby解析xml文件

使用libxml-ruby解析xml文件
EN

Stack Overflow用户
提问于 2012-09-10 10:58:11
回答 1查看 2.4K关注 0票数 1

我使用的是rails 2.3.9,ruby 1.9.3,rubygems 1.8.24和windows 7终极

我安装了libxml-ruby,希望得到我想要的输出。我有一个总共超过150个节点的xml文件,我只想得到每个节点的值。

代码语言:javascript
复制
require 'xml'
my_file = 'invoice3.xml'
parser = XML::Parser.file(my_file)
document = parser.parse
terminalId_node = document.find('//terminalId').first
terminalId = terminalId_node.content
puts terminalId

我已经能够得到terminalId的值,但是我想循环这个文件以节省编码时间。任何帮助都将不胜感激。

Update:示例XML输入--这只是实际xml文件的一部分

代码语言:javascript
复制
<invoice>
<terminalId>68</terminalId>
<transId>8</transId>
<docDate>2012-08-06 18:55:57</docDate>
<status>P</status>
<siteId>19</siteId>
<transCode>REL</transCode>
<typeCode>POS</typeCode>
<TotalQuantity>1</TotalQuantity>
<VATRate>12</VATRate>
<amountGrossVAT>0</amountGrossVAT>
<amountGrossNonVAT>100</amountGrossNonVAT>
<amountGrossZeroRated>0</amountGrossZeroRated>
<amountGross>100</amountGross>
<amountItemDiscount>0</amountItemDiscount>
<amountOverallDiscount>0</amountOverallDiscount>
<percentOverAllDiscount>0</percentOverAllDiscount>
<OverallDiscountText></OverallDiscountText>
<amountSeniorCitizenDiscount>0</amountSeniorCitizenDiscount>
<AmountOriginalSeniorCitizenDiscount>0</AmountOriginalSeniorCitizenDiscount>
<AmountCustomerPromoDiscount>0</AmountCustomerPromoDiscount>
<amountHeaderDiscount>0</amountHeaderDiscount>
<percentHeaderDiscount>0</percentHeaderDiscount>
<invoice-details>
    <invoice-detail>    
    <amountTotalDiscount>0</amountTotalDiscount>
<percentTotalDiscount>0</percentTotalDiscount>
<amountNetVAT>0</amountNetVAT>
<amountNetNonVat>100</amountNetNonVat>
<amountNetZeroRated>0</amountNetZeroRated>
<amountNet>100</amountNet>
<AmountVatExempt>0</AmountVatExempt>
<amountDue>100</amountDue>
    <invoice-detail>
<invoice-details>
</invoice>

我想通过迭代提取所有的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-11 14:24:52

下面的行检索文档中的所有terminalId元素,并返回包含其内容的数组:

代码语言:javascript
复制
contents = document.find('//terminalId').to_a.map(&:content)

相当于:

代码语言:javascript
复制
contents = document.find('//terminalId').to_a.map { |e| e.content }

与您的示例相比,惟一的区别是我们不使用first(),它只请求第一个找到的元素,而是使用to_a()检索所有结果。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12350257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档