Эффективный синтаксический анализ XML для конкретного типа xsi: - PullRequest
2 голосов
/ 22 декабря 2010

Все,

У меня есть каталог больших файлов 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 и анализирую каждыйузел / элемент, пока я не найду свой конкретный тип Wi: Webi.Это кажется ужасно эффективным и я чувствую, что мне не хватает функции Java, которая позволила бы мне просто извлечь все элементы / узлы с типом "wi: Webi".Есть ли более простое решение?

Обновления: я начинаю использовать XPath, но у меня возникают проблемы с созданием выражений.Пока я пытаюсь:

xpath.compile("//*[@xsi:type='wi:Webi']");

В соответствии с другими сообщениями stackoverflow, у которых были похожие проблемы, мне нужно определить в своем выражении пространство имен.Я надеялся, что в результате поиска * [@ xsi: type] для любого потомка с типом wi: Webi будет возвращено, как в списке узлов.

1 Ответ

1 голос
/ 22 декабря 2010

Эффективность «работает быстро и легко», а затем эффективность «разработчик пишет меньше строк кода».Что вас больше всего беспокоит?

Если это скорость, посмотрите на обработку SAX, так как ее невозможно переоценить, насколько более эффективной она может быть, если ваши требования могут быть выполнены с ней.Это довольно умственное приспособление при переходе от DOM к SAX, но я рекомендую это.

В противном случае, если вам нужно придерживаться DOM, посмотрите на XPath, чтобы легко извлечь все соответствующие элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...