2016-04-05 3 views
0

У меня есть исходный документ, из которого я хотел бы найти атрибут самым быстрым способом. Например: ниже довольно глупый пример:Самый быстрый способ поиска атрибута в org.w3c.dom.Document

<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> 

В принципе, я хочу, чтобы получить атрибут name строк, где character является теневым. Я в порядке с первым таким матчем (другие могут быть проигнорированы/будут иметь одинаковые name).

Я рассмотрел цикл по всему документу и получил первое совпадение против выполнения регулярного поиска после преобразования документа в строку.

Который был бы быстрее?

+1

Я не рекомендую использовать регулярное выражение, но если скорость имеет значение, вы можете выбрать синтаксический анализатор (без проверки), который не нужно строить дом. http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html –

ответ

1

Если скорость действительно важна, вы должны пойти на второй подход, ища строковый документ с регулярным выражением (вам повезло, XML is no HTML). Но вы должны учитывать, что упорядочение атрибутов в XML не гарантируется. Также может помочь Scanner.

Если простота кода является более важным, я предлагаю использовать Xpath

XPath xpath = XPathFactory.newInstance().newXPath(); 
String name = xpath.evaluate("//PossibleSuspect[@character='shady']/@name",document); 

И его не так уж медленно либо.

+0

Хотя XML, конечно же, более легко разбирается, [это не так просто, как кажется на первый взгляд] (http://stackoverflow.com/а/702222/1831987). – VGR

+1

согласился, это компромисс между производительностью и гибкостью/совместимостью. Я бы предпочел путь xpath, так как редко видел случаи, когда обработка xml действительно критична по времени. Тем не менее, подход, основанный на событиях, такой как SAX или другие XMLStreams, вероятно, является хорошим выбором. –

Смежные вопросы