Имеется xml файл типа
<output>
<writeto>file</writeto>
<names>
<services>services.bin</services>
<methods>methods.bin</methods>
<paths>paths.bin</paths>
<query_strings>query_strings.bin</query_strings>
<protocols>protocols.bin</protocols>
<referrers>referrers.bin</referrers>
<user_agents>user_agents.bin</user_agents>
<cookies>cookies.bin</cookies>
<content_types>content_types.bin</content_types>
<set_cookies>set_cookies.bin</set_cookies>
</names>
</output>
имеется код
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
...........
...........
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
_xmlConfig = builder.parse(new File(resource.toString()));
при парсинге типа
Node currentNameNode = namesNode.getFirstChild();
while (currentNameNode != null)
{
currentNameNode = currentNameNode.getNextSibling();
}
namesNode это соответственно нод names в <output> наверху,
в currentNameNode поочередно садятся ноды с Value '\n\t\t\t'(пробелы и новая строка перед тем же <services>) и name-ом #text...
С получением value того же <services> делается ServiceNode.getFirstChild().getNodeValue, почтому что Value его самого null.. Вобщем впечатление что любой текст помещается в нод с именем #text и value-м этот текст. даже пробелы, \n и.т.д.
Вот такая вот ботва.. Может кто сталкивался..
JDK 1.4.2
Ве правильно, пробелы и все остальное тоже считаются частью значения нода, соответственно, пользуй trim(), а лучше не использовать DOM парсер вооще, а пользоваться JAXB — намного проще в использовании и работает намного быстрее.
Проблема не в trim или не trim, а в том что приходится отфильтровывать созданные самим парсером ноды с именами #text. что-то вроде if(node.getNodeName.equalsIgnorecase("#text")) continue;
Хотя насчет jaxb заметано, буду смотреть
Здравствуйте, dream_inspector, Вы писали:
_>Проблема не в trim или не trim, а в том что приходится отфильтровывать созданные самим парсером ноды с именами #text. что-то вроде if(node.getNodeName.equalsIgnorecase("#text")) continue;
_>Хотя насчет jaxb заметано, буду смотреть
http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/Node.html
Там вверху javadoc написанно что из ноды приходит
if(node.getNodeType()==Node.ELEMENT_NODE) {
.....
}
RTFM получился.. извиняюсь недоглядел,