让我们来看一个简单的 XML 文档:
<x>
<e>
<e>
<e>Whatever 1</e>
</e>
</e>
<e>
<e>
<e>Whatever 2</e>
</e>
</e>
<e>
<e>
<e>Whatever 3</e>
</e>
</e>
</x>
使用标准的 org.w3c.dom,我可以通过以下方式获取 X 中的节点......
NodeList fullnodelist = doc.getElementsByTagName("x");
但如果我想返回下一组“e”,我会尝试使用类似 ..
Element element = (Element) fullnodelist.item(0);
NodeList nodes = pelement.getElementsByTagName("e");
期望它返回“3”个节点(因为有 3 组“e”),但相反,它返回“9”——因为它显然获得了所有带有“e”的条目。
在上述情况下这很好,因为我可能会遍历并找到我要查找的内容。我遇到的问题是,当 XML 文件如下所示时:
<x>
<e>
<pattern>whatever</pattern>
<blanks>
<e>Something Else</e>
</blanks>
</e>
<e>
<pattern>whatever</pattern>
<blanks>
<e>Something Else</e>
</blanks>
</e>
</x>
当我请求“e”值时,它返回 4,而不是(我期望的)2。
我只是不了解 DOM 解析的工作原理吗?通常在过去,我使用自己的 XML 文档,所以我永远不会这样命名项目,但不幸的是,这不是我的 XML 文件,我别无选择,无法像这样工作。
我想我会做的是编写一个“向下钻取”节点的循环,以便我可以将每个节点组合在一起...
public static NodeList getNodeList(Element pelement, String find)
{
String[] nodesfind = Utilities.Split(find, "/");
NodeList nodeList = null;
for (int i = 0 ; i <= nodesfind.length - 1; i++ )
{
nodeList = pelement.getElementsByTagName( nodesfind[i] );
pelement = (Element)nodeList.item(i);
}
// value of the nod we are looking for
return nodeList;
}
.. 因此,如果您将“s/e”传递给函数,它将返回我正在寻找的 2 个节点(或元素,也许我使用的术语不正确?)。相反,它返回该节点内的所有“e”节点。
我为此使用 J2SE,因此选项相当有限。我不能使用任何第三方 XML 解析器。
无论如何,如果有人仍然和我在一起并有建议,我将不胜感激。
最佳答案
如果您手动遍历 Xml,请尝试使用一个变量,该变量在您遇到每个“e”标记时递增,然后在您离开时递减。
如果来源遵循您给出的上述示例,您可以使用一个简单的 if 语句来确保在执行操作之前计数器等于 2(假设它从 0 开始)
我可能稍微误解了您的确切问题,但我希望这对您有所帮助。
关于xml - 解析具有相同名称的嵌套 XML 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487682/
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[
我正在使用ruby1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat
下面例子中的Nested和Child有什么区别?是否只是同一事物的不同语法?classParentclassNested...endendclassChild 最佳答案 不,它们是不同的。嵌套:Computer之外的“Processor”类只能作为Computer::Processor访问。嵌套为内部类(namespace)提供上下文。对于ruby解释器Computer和Computer::Processor只是两个独立的类。classComputerclassProcessor#Tocreateanobjectforthisc
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的