从“strings / that / are / paths”数组构建XML树(在Ruby中)
发布时间:2020-12-16 23:21:14 所属栏目:百科 来源:网络整理
导读:如果你有一个字符串路径数组,在 Ruby中构建XML树的最佳方法是什么? paths = [ "nodeA1","nodeA1/nodeB1/nodeC1","nodeA1/nodeB1/nodeC1/nodeD1/nodeE1","nodeA1/nodeB1/nodeC2","nodeA1/nodeB2/nodeC2","nodeA3/nodeB2/nodeC3" ] xml = nodeA1 nodeB1 nodeC
如果你有一个字符串路径数组,在
Ruby中构建XML树的最佳方法是什么?
我的第一个想法是将路径字符串拆分为一个数组,并将其深度和内容与前一个数组进行比较,但如果我到达路径“nodeA1 / nodeB1 / nodeC1 / nodeD1 / nodeE1”,当我回到“nodeA1 / nodeB1 / nodeC2”,[1]节点是共同的祖先,但跟踪它是混乱的,至少我这样做的方式. 我也想让它递归,所以我可以在它自己的函数中处理每个嵌套级别,但还没有达到任何半通用的解决方案. 当你遇到这个问题时,你们常常做的任何想法或事情? 谢谢! 解决方法
REXML是你的朋友!你正在获得XPath,所以使用’em!
require 'rexml/document' paths = [ "nodeA1","nodeA3/nodeB2/nodeC3" ] x = REXML::Document.new x.elements << "xml" paths.each do |p| steps = p.split(///) steps.each_index do |i| unless REXML::XPath.first(x,"/xml/" + steps[0..i]*"/") REXML::XPath.first(x,"/xml/" + steps[0...i]*"/").elements << steps[i] end end end puts x.to_s 请注意,您的示例数据在顶层都有nodeA1和nodeA3,所以我在这里开始使用名为“xml”的根.如果“3”是拼写错误,并且nodeA1确实是您的根(正如您的示例XML输出所示),您可以删除’x.elements<< “xml”'行并将所有“/ xml /”更改为“/”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |