所有
我有一个包含以下设置的大型xml文件目录:
<io:InfoObjects xmlns:crole="http://enterprise.businessobjects.com/3.0/customrole"
xmlns:fo="http://enterprise.businessobjects.com/3.0/folder"
xmlns:io="http://enterprise.businessobjects.com/3.0/infoobject"
xmlns:md.dc="http://enterprise.businessobjects.com/3.0/metadata.dataconnection"
xmlns:un="http://enterprise.businessobjects.com/3.0/universe"
xmlns:wi="http://enterprise.businessobjects.com/3.0/webi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://enterprise.businessobjects.com/3.0/customrole BusinessObjects_CustomRole.xsd
http://enterprise.businessobjects.com/3.0/folder BusinessObjects_Folder.xsd
http://enterprise.businessobjects.com/3.0/infoobject BusinessObjects_InfoObject.xsd
http://enterprise.businessobjects.com/3.0/metadata.dataconnection BusinessObjects_MetaData_DataConnection.xsd
http://enterprise.businessobjects.com/3.0/universe BusinessObjects_Universe.xsd
http://enterprise.businessobjects.com/3.0/webi BusinessObjects_Webi.xsd" version="1200" illegalCharsEncoded="true">
<io:InfoObject xsi:type="wi:Webi">
<io:ID>1</io:ID>
<io:Name>MyName</io:Name>
<io:Description>NoDesc</io:Description>
</io:InfoObject>
</io:InfoObjects>
原始问题: (在Java 1.5中)我目前正在使用dom并解析每个节点/ elemnt,直到找到我特定类型的wi:Webi。这似乎是非常有效的,并且觉得我缺少一个Java函数,它允许我简单地提取所有类型为“wi:Webi”的元素/节点。有更简单的解决方案吗?
更新: 我开始使用XPath但是,我遇到了表达式创建的问题。到目前为止,我正在尝试:
xpath.compile("//*[@xsi:type='wi:Webi']");
根据其他类似问题的stackoverflow帖子,我需要在我的表达式中定义名称空间。我希望* [@ xsi:type]搜索会声明任何类型为wi的子节点:Webi将其返回到节点列表中。
答案 0 :(得分:1)
“快速而轻盈”的效率,然后是“开发人员编写更少的代码行”效率。你最关心的是哪一个?
如果速度快,请查看SAX处理,因为如果您的要求可以满足要求,那么它的效率会被夸大。这是从DOM到SAX的精神调整,但我推荐它。
否则,如果您需要坚持使用DOM,请查看XPath以轻松提取所有匹配元素。