Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Разбор XML-дока с пом. Java / 25 сообщений из 29, страница 1 из 2
13.04.2005, 09:27
    #33012336
Unused name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Привет всем.
Столкнулся с такой проблемой: есть xml-документ, который нуждается в доработке, переработке и т.п. Но сделать нужно это с помощью средств Java. Например, вставить в док еще одно дерево или просто элемент; удалить какие-то элементы или их атрибуты; найти элемент по названию, вытащить его контент и т.д.
Просьба подсказать каким образом решается данная задача, есть ли в стандартной поставке Java для таких целей специальные классы, если есть, то какие; и если возможно, хотелось бы увидеть небольшой примерчик.
Спасибо.
...
Рейтинг: 0 / 0
13.04.2005, 09:34
    #33012347
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
чтение

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 import  org.w3c.dom.*;
 import  org.xml.sax.*;

 import  javax.xml.parsers.*;
...

FileInputStream fis =  new  FileInputStream("c:\\test.xml");
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(fis);

Element rootElement = doc.getDocumentElement();
NodeList usersNodeList = rootElement.getElementsByTagName("user");

 for  ( int  i =  0 ; i < usersNodeList.getLength(); i++) {
  Element userElement = (Element) usersNodeList.item(i);

  Element tag = getFirstElementByTagName(userElement, "user-name");
  System.out.println("UserName: " + getNodeText(tag));
  ...
}

где:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
   private  Element getFirstElementByTagName(Element element, String tagName) {
    Element e =  null ;

    NodeList nl = element.getElementsByTagName(tagName);
    e = (Element) nl.item( 0 );

     return  e;
  }

и:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   private  String getNodeText(Node node) {
    NodeList list = node.getChildNodes();
     for  ( int  i =  0 ; i < list.getLength(); i++) {
      Node child = list.item(i);
       if  (child.getNodeType() == Node.CDATA_SECTION_NODE) {
        CDATASection section = (CDATASection) child;
         return  section.getData();
      }  else   if  (child.getNodeType() == Node.TEXT_NODE) {
         return  child.getNodeValue();
      }
    }
     return  "";
  }

и test.xml выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user>
    <user-name>test</user-name>
    <user-password>test</user-password>
  </user>

  <user>
    <user-name>me</user-name>
    <user-password>me</user-password>
  </user>
</users>
...
Рейтинг: 0 / 0
13.04.2005, 09:42
    #33012372
Unused name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
о! начало положено. очень хорошо, понятно. Спасибо, А.Грасоff™ JE .
...
Рейтинг: 0 / 0
15.04.2005, 08:30
    #33017326
Unused name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Ну, неужели больше никто не сталкивался с этим? Или просто помочь не хотят??
С чтением и правкой дока разобрался. Это проще делать с пом. XMLDocument, что в oracle.xml.parser.v2.
Читать его так:

XMLDocument doc = null;
try {
DOMParser parser = new DOMParser();
try {
String dir= "" ;
FileInputStream fis = new FileInputStream("путь");
parser.setPreserveWhitespace(false);
parser.parse(fis);
fis.close();
}
catch ...

doc = (XMLDocument) parser.getDocument();
}
catch ...

Ну, а дальше делать с ним, че хотишь :)

А вот как его закинуть обратно в файл - вкурить не могу...
Может подскажет кто???
Спасибо.
...
Рейтинг: 0 / 0
15.04.2005, 09:05
    #33017375
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Unused nameА вот как его закинуть обратно в файл - вкурить не могу...
Может подскажет кто???
Спасибо.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ransformerFactory tFactory =
                TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer();

            DOMSource source =  new  DOMSource(doc);
            StreamResult result =  new  StreamResult( new 
File("c:\куда_нибудь\какой_нибудь.хмл"));
            transformer.transform(source, result);



Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
15.04.2005, 09:07
    #33017378
Гости
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
ннтипи ёклмн.

Код: plaintext
1.
2.
3.
4.
TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source =  new  DOMSource(doc);
StreamResult result =  new  StreamResult( new  Filе ("c:\куда_нибудь\какой_нибудь.хмл"));
transformer.transform(source, result);
...
Рейтинг: 0 / 0
15.04.2005, 12:57
    #33017974
Unused name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
ааа... забыл ответить.
все гораздо проще...
у самого объекта есть св-во записи в выходной поток:
Код: plaintext
1.
2.
3.
File fil =  new  File ("путь/test.xml");
FileOutputStream fos =  new  FileOutputStream(fil);
doc.print(fos);
делов-то...
Спасибо всем, кто пытался помочь и кто помог :)!
...
Рейтинг: 0 / 0
15.04.2005, 14:04
    #33018180
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Это у ораклового парсера есть, а у стандартного org.w3c.dom.Document такого метода нет.
...
Рейтинг: 0 / 0
19.04.2005, 08:28
    #33022323
Unused name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
я ж так и сказал:
Это проще делать с пом. XMLDocument, что в oracle.xml.parser.v2
...
Рейтинг: 0 / 0
19.04.2005, 08:33
    #33022325
Unused name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Пока разбирался появился еще вопрос .
Не буду создавать новый топик, так как здесь будет правильней.

Необходимо применить к полученному XMLDocument XSLT-преобразование
Че-то посидел покрутил класс XSLProcessor - не получается. Жаль, конечно, что у самого XMLDoc'а нет нужного метода...
Может кто-нибудь решал уже подобную задачу?
Огромная просьба - подсказать решение!
Спасибо!
...
Рейтинг: 0 / 0
19.04.2005, 11:36
    #33022678
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
С вашими задачами спокойно справится стандартный JAXP без всяких приблуд!
Вот здесь все написано, см. главы: 4,5,6,7.
...
Рейтинг: 0 / 0
21.04.2005, 12:46
    #33027439
Unused name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Дааа, со всем разобрался...
Всем спасибо.
Согласен с последним советом. Но все-таки, вместе (org.w3c.dom и oracle.xml.*) они сильней!
...
Рейтинг: 0 / 0
22.04.2005, 10:19
    #33029299
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
не берите моду завязываться на проприетарные классы
org.w3c.dom - все что нуна

это ж вам не микрософт :)
...
Рейтинг: 0 / 0
22.04.2005, 10:24
    #33029317
А.Грасоff™ JE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
jdev333не берите моду завязываться на проприетарные классы
org.w3c.dom - все что нуна
тебе никто никогда не говорил, что в org.w3c.dom нет ни одного класса?
и использовать указанный тобой пакет нельзя без реализации его интерфейсов?

PS классы org.w3c.dom.*Exception не считаются
...
Рейтинг: 0 / 0
22.04.2005, 14:06
    #33030096
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Вы прекрасно поняли, что я хотел сказать :)

(на всякий случай - не нуна использовать приприетарный метод
)
...
Рейтинг: 0 / 0
26.04.2005, 14:35
    #33035947
Unused name
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
ёклмн. а теперь нюансы, нюансы, прикладные задачки...
еще вопрос, соответственно:
есть ХМЛ-док.
Код: plaintext
1.
2.
3.
4.
5.
6.
<?xml ...?> 
<rowset> 
  <row> 
    ...    
  </row> 
</rowset> 
Нужно преобразовать в:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<?xml ...?> 
<doc> 
  <rowset> 
    <row> 
      ...    
    </row> 
  </rowset> 
</doc> 
Вроде все просто, но я сегодня че-то туплю.
Подскажите, ась? Умру ведь...
...
Рейтинг: 0 / 0
26.04.2005, 15:25
    #33036175
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Unused nameВроде все просто, но я сегодня че-то туплю.
Подскажите, ась? Умру ведь...
ну а в чем дело то? Создай новый корень дереву и от него пляши.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
26.04.2005, 18:26
    #33036841
Naug
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
у Документа (емнип) есть метод importNode - соответственно ветки с деревьев можно обламывать и прибивать к другим деревьям
...
Рейтинг: 0 / 0
26.04.2005, 18:52
    #33036886
kostya...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Господа, а если чтение не из файла, а из сокета, возможно ли применение данной технологии и как надо переписать строчку:
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(fis);
...
Рейтинг: 0 / 0
26.04.2005, 19:47
    #33036982
Йоу
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Код: plaintext
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s.getInputStream());
...
Рейтинг: 0 / 0
12.05.2005, 11:50
    #33059375
Kostya...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Написал как раз эту строку:
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s.getInputStream());
Но в doc ничего не попадает, а java при этом выдает такое исключение:
java.net.SocketException: Connection reset

В чем может быть ошибка?
...
Рейтинг: 0 / 0
12.05.2005, 11:59
    #33059400
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Kostya...Написал как раз эту строку:
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(s.getInputStream());
Но в doc ничего не попадает, а java при этом выдает такое исключение:
java.net.SocketException: Connection reset

В чем может быть ошибка?
проблема не в XML парсере, а в том, что тот хост с которого ты инфу берешь, тебя не хочет, или ты адрес неправильно указал. Попробуй написать просто, s.getInputStream() должна быть та же ошибка (поидее).
...
Рейтинг: 0 / 0
12.05.2005, 12:26
    #33059510
Kostya...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Если я пишу такое:

char[] bytes = new char[10240];
int len;
String res_msg="";
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())) ;

len = br.read(bytes);
if (len>0)
{
for (int j=0;j<len;j++)
res_msg=res_msg+bytes[j];

System.out.println("SERVER RESEIVING MESSAGE... length "+len+"..."+res_msg+"...");
}

То у меня выдается информация о том что пришло и это как раз то, что я ожидаю получить...
...
Рейтинг: 0 / 0
12.05.2005, 12:39
    #33059547
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
ну так и передавай свою строку res_msg парсеру, чего не нравится то?
...
Рейтинг: 0 / 0
12.05.2005, 12:48
    #33059576
Kostya...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор XML-дока с пом. Java
Вопрос, конечно, глупый, но я его все равно задам:

КАК???

Я бы рад, но не могу, как тут принято говорить, вкурить, как же это сделать...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Разбор XML-дока с пом. Java / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]