Xerces ведет себя по -разному на Sun Jre v1.5 и IBM J9 v1.5
Вопрос
Я пытаюсь проанализировать несколько HTML, используя Nekohtml.
Проблема в том, что когда приведенный ниже кодовый фрагмент выполняется на SUN JDK 1.5.0_01
Это работает нормально (это когда я использую Eclipse с Sun Jre). Но когда то же самое исполняется на IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223ifx-20070323 (JIT enabled)
Тогда это не работает (это когда я использую IBM RAD для разработки).
NodeList tags = doc.getElementsByTagName("td");
for (int i = 0; i < tags.getLength(); i++)
{
Element elem = (Element) tags.item(i);
// do something with elem
}
Работая нормально, я имею в виду, что я получаю список элементов «TD», которые я могу обработать дальше. В случае J9 я не вхожу в for
петля.
Я использую последнюю версию Nekohtml (вместе с комплексными банками Xerces). А doc
В приведенном выше коде тип org.w3.dom.Document
(Используемый класс времени выполнения org.apache.html.dom.HTMLDocumentImpl
)
Детали IBM J9 следующие:
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pwi32devifx-20070323 (ifix 117674: SR4 + 116644 + 114941 + 116110 + 114881))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223ifx-20070323 (JIT enabled)
J9VM - 20070322_12058_lHdSMR
JIT - 20070109_1805ifx3_r8
GC - WASIFIX_2007)
JCL - 20070131
Любая идея, предложение или обходной путь ценится. Спасибо.
Решение
У меня есть 2 идеи.
- Я только что подтвердил, что Xerces является частью установки JRE, поэтому я полагаю, что он прибывает в путь вашего приложения оттуда. Наверное, Sun и IBM приносят вам разные версии Xerces. Итак, в качестве первого подхода проверьте это и, вероятно, попытайтесь заменить то, что у вас есть под IBM на версию Sun. Если это поможет вам иметь 2 варианта: продолжайте запускать IBM Java с Xerces от Sun или продолжать исследовать, что не так с Xerces от IBM.
- Есть ли другие различия между вашим разработчиком и производственной средой? Это те же операционные системы? Это шанс, что вы используете (например) Windows для разработки и UNIX для производства, но ваш XML написан в Windows с r n в качестве новой линии? Или даже больше: если ваш XML содержит символы Unicode и записанный в Windows, он может содержать специальный (невидимый) префикс, который указывает, что это Unicode. Этот префикс может привести к провалу анализатора.