2012-03-16 2 views
1

Я обрабатываю XML-документ и считываю значение из него. Одно из значений, которое я читаю, имеет/в нем. Вот как выглядит значение: M/S John Smith At 4. Я тестировал эмулятор и показывал правильное значение. Теперь я развернул мое приложение для своего Samsung Galaxy S2 device, и процесс не корректно считывает значение. Он просто показывает M в поле значений для этого имени.не удалось прочитать «/» на устройстве

Я думаю, что это может быть потому, что/является особым символом. Есть ли что-то, что я могу сделать, чтобы избежать специального символа в значении и прочитать все это имя?

P.S .: Я не опытный Java-разработчик, поэтому этот вопрос может показаться вам глупым, но если у вас есть решение, сообщите мне об этом.

Когда я печатая значение в окне консоли, это то, как он читает в XMLDOCUMENT после разбора его: M/S John Smith At 4

Эта функция считывает значение:

public static String getCharacterDataFromElement(Element e) { 
     Node child = e.getFirstChild(); 
     if (child instanceof CharacterData) { 
      CharacterData cd = (CharacterData) child; 
      return cd.getData(); 
     } 
     return ""; 
     } 

В adove функции, cd.getdata() возвращает M

После некоторых более отладок:

Когда я вижу элемент в окне просмотра, F или другие имена, у него есть только один ребенок. Но для элемента, который содержит/он получил 3 ребенка. Он разрезает stringbuffer bcz, который он видит/находится там. Я предполагаю, что либо я должен изменить нижеприведенную функцию и подготовить все дочерние узлы, либо я должен использовать escape-символ там, прежде чем передать его.

+1

Это звучит как интересная проблема; можете ли вы опубликовать код, который вы написали, который извлекает только «M»? – mfrankli

+0

@mfrankli: см. Редактирование. – Asdfg

+0

проблема, как вы уже догадались, состоит в том, что символ '/' является специальным символом. / ссылается на значение ascii 47 '/'. Твист здесь заключается в том, что он работает на эмуляторе, но не на устройстве, что удивительно, и у меня нет хорошего ответа для этого. Чтобы просто заставить его работать, вы могли бы попробовать лить «ребенка» в CDataSection (http://developer.android.com/reference/org/w3c/dom/CDATASection.html), а не в CharacterData – mfrankli

ответ

0

Это то, что новый метод теперь выглядит следующим образом:

public static String getCharacterDataFromElement(Element e) { 
    return e.getTextContent(); 
    } 

В настоящее время это работает. Я не знаю, как долго, но надеюсь, до тех пор, пока я не решит сделать правильные вещи и не перейду через дочерние узлы и не объединить строковые значения.

1

Если мы говорим о текстовом узле, вы пробовали NodegetNodeValue()?

public static String getCharacterDataFromElement(Element e) 
{ 
    Node child = e.getFirstChild(); 
    return child.getNodeValue(); 
} 

Документация: http://docs.oracle.com/javase/1.4.2/docs/api/org/w3c/dom/Node.html#getNodeValue%28%29

+0

Да.Я попробовал это. Тот же результат. Bcz of/sign, этот узел имеет 3 детей. Мне нужно избежать символа /, я думаю, – Asdfg

+0

e.getTextContent(); это то, что дает мне правильные данные. – Asdfg

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