Java 在org.w3c.dom.Document中搜索属性的最快方法
我有一个输入文档,我想从中以最快的方式搜索属性。下面是一个相当愚蠢的例子:Java 在org.w3c.dom.Document中搜索属性的最快方法,java,regex,Java,Regex,我有一个输入文档,我想从中以最快的方式搜索属性。下面是一个相当愚蠢的例子: <PossibleSuspects> <PossibleSuspect name="A" id="423" character="shady"/> <PossibleSuspect name="B" id="423" character="normal"/> <PossibleSuspect name="C" id="423" character="normal"/&
<PossibleSuspects>
<PossibleSuspect name="A" id="423" character="shady"/>
<PossibleSuspect name="B" id="423" character="normal"/>
<PossibleSuspect name="C" id="423" character="normal"/>
<PossibleSuspect name="A" id="423" character="shady"/>
</PossibleSuspects>
基本上,我想获得字符
不可见的行的名称
属性。我同意第一次这样的匹配(其他的可以忽略/将有相同的名称
)
我考虑过在整个文档上循环并获得第一个匹配项,而不是在将文档转换为字符串后进行正则表达式搜索
哪一种更快?如果速度真的很重要,您应该使用第二种方法,使用正则表达式搜索字符串文档(幸运的是,您)。但您应该考虑到,XML中属性的顺序并不能得到保证。还有一个可能会有帮助 如果代码的简单性更重要,我建议使用Xpath
XPath xpath = XPathFactory.newInstance().newXPath();
String name = xpath.evaluate("//PossibleSuspect[@character='shady']/@name",document);
而且也没有那么慢。如果速度真的很重要,你应该使用第二种方法,用正则表达式搜索字符串文档(幸运的是你)。但您应该考虑到,XML中属性的顺序并不能得到保证。还有一个可能会有帮助 如果代码的简单性更重要,我建议使用Xpath
XPath xpath = XPathFactory.newInstance().newXPath();
String name = xpath.evaluate("//PossibleSuspect[@character='shady']/@name",document);
而且也没有那么慢。我不建议使用正则表达式,但是如果速度很重要,您可以选择一个不需要构建dom树的拉式解析器(无需验证)。我不建议使用正则表达式,但是如果速度很重要,您可以选择一个不需要构建dom树的拉式解析器(无需验证)。虽然XML当然更容易解析,但这是性能和灵活性/兼容性之间的折衷。我更喜欢xpath方式,因为我很少看到xml处理对时间非常关键的情况。尽管如此,事件驱动的方法(如SAX oder XMLStreams)可能也是一个不错的选择。虽然XML肯定更容易解析,但同意,它是性能和灵活性/兼容性之间的折衷。我更喜欢xpath方式,因为我很少看到xml处理对时间非常关键的情况。尽管如此,事件驱动方法(如SAX oder XMLStreams)可能也是一个不错的选择。