gpt4 book ai didi

ruby - REXML 在 ruby​​ 中解析 XML

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:29 24 4
gpt4 key购买 nike

各位,

我将 REXML 用于示例 XML 文件:

<Accounts title="This is the test title">  
<Account name="frenchcustomer">
<username name = "frencu"/>
<password pw = "hello34"/>
<accountdn dn = "https://frenchcu.com/"/>
<exporttest name="basic">
<exportname name = "basicexport"/>
<exportterm term = "oldschool"/>
</exporttest>
</Account>
<Account name="britishcustomer">
<username name = "britishcu"/>
<password pw = "mellow34"/>
<accountdn dn = "https://britishcu.com/"/>
<exporttest name="existingsearch">
<exportname name = "largexpo"/>
<exportterm term = "greatschool"/>
</exporttest>
</Account>
</Accounts>

我正在这样阅读 XML:

@data = (REXML::Document.new file).root
@dataarr = @@testdata.elements.to_a("//Account")

现在我想获取 frenchcustomer 的用户名,所以我尝试了这个:

@dataarr[@name=fenchcustomer].elements["username"].attributes["name"]

这失败了,我不想使用数组索引,例如

@dataarr[1].elements["username"].attributes["name"]

会工作,但我不想那样做,我在这里缺少什么吗?我想使用数组并使用帐户名获取法国用户的用户名。

非常感谢。

最佳答案

我推荐你使用XPath

第一次匹配可以使用first方法,数组使用match即可。

上面的代码返回帐户“frenchcustomer”的用户名:

REXML::XPath.first(yourREXMLDocument, "//Account[@name='frenchcustomer']/username/@name").value

如果你真的想使用用@@testdata.elements.to_a("//Account")创建的数组,你可以使用find方法:

french_cust_elt = the_array.find { |elt| elt.attributes['name'].eql?('frenchcustomer') }
french_username = french_cust_elt.elements["username"].attributes["name"]

关于ruby - REXML 在 ruby​​ 中解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9267993/

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