Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Почти offtop: Чем читать из xml / 19 сообщений из 19, страница 1 из 1
27.06.2006, 16:02
    #33817254
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
Честно говоря я в xml новичок (надеюсь пока).
Помогите разобраться чем лучше читать(только читать) из xml. Понял что парсера 2: DOM и SAX. У xml шаблона пока нет. Есть jaxb и jaxp, я так понял что jaxb удобен когда есть шаблон, jaxp когда данные достаточно в произвольном виде. Смысл xml - хранить insert, select, update и delete sql.
Заранее спасибо.
...
Рейтинг: 0 / 0
27.06.2006, 16:29
    #33817354
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
храни в обычном текстовом файле


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
27.06.2006, 16:53
    #33817449
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
Не планы большие. Там же будет и имя Sequence, может будет поля и их типы, имя PK. Вообщем хочется что-то наподобие DataSet в Delphi, понимаю что будет очень отдаленно, но все-же.
...
Рейтинг: 0 / 0
27.06.2006, 17:14
    #33817504
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
загрузка через сах, сохранение дом

только узлы, аттрибуты игнорируются

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
 package  uui;

 import  java.util.Vector;
 import  javax.xml.parsers.*;
 import  javax.xml.transform.*;
 import  org.w3c.dom.*;
 import  java.io.*;
 import  javax.xml.transform.stream.*;
 import  javax.xml.transform.dom.*;
 import  org.xml.sax.*;
 import  org.xml.sax.helpers.DefaultHandler;
 import  javax.swing.*;

 public   class  UUIVariable
     extends  DefaultHandler
{
   private  String text = "";
   private  String name;
   private  UUIVariable base;
   private  UUIVariable parent =  null ;
   private  Vector children =  new  Vector();
   private   boolean  first;

   public  UUIVariable(String n)
  {
    name = n;
  }

   public  String getText()
  {
     return  text;
  }

   public   void  setText(String t)
  {
    text = t;
  }

   public  String getName()
  {
     return  name;
  }

   public   void  setName(String n)
  {
    name = n;
  }

   public   void  addChild(UUIVariable v)
  {
    children.add(v);
  }

   public   void  dropChildren()
  {
    children.clear();
  }

   public   boolean  hasChildren()
  {
     return !children.isEmpty();
  }

   public   void  dropChild(UUIVariable v)
  {
    children.remove(v);
  }

   public  UUIVariable getChild( int  i)
  {
     return (UUIVariable)children.get(i);
  }

   public  UUIVariable getChild(String name)
  {
    UUIVariable v =  null ;
     if (hasChildren())
    {
       for ( int  i =  0 ; i < countChildren(); i++)
      {
         if (getChild(i).getName().equals(name))
        {
          v = getChild(i);
           break ;
        }
      }
    }
     return  v;
  }

   public   int  countChildren()
  {
     return  children.size();
  }

   public   void  startElement(String uri, String localName, String qName
                           , Attributes attributes)
       throws  SAXException
  {
     if (first)
    {
      base.setName(qName);
      first = false;
    }
     else 
    {
      UUIVariable v =  new  UUIVariable(qName);
      v.setParent(base);
      base.addChild(v);
      base = v;
    }
  }

   public   void  characters( char [] ch,  int  start,  int  length)
       throws  SAXException
  {
    base.setText(base.getText()+ new  String(ch, start, length));
  }

   public   void  endElement(String uri, String localName, String qName)
       throws  SAXException
  {
     if (!base.equals( this ))
    {
      base = base.parent;
    }
  }

   private   void  setParent(UUIVariable v)
  {
     this .parent = v;
  }

   public   void  loadFromFile(File file)
  {
    SAXParserFactory factory = SAXParserFactory.newInstance();
     try 
    {
      SAXParser parser = factory.newSAXParser();
      setText( null );
      dropChildren();
      base =  this ;
      first = true;
      parser.parse(file,  this );
    }
     catch (ParserConfigurationException e)
    {
     //
    }
     catch (SAXException e)
    {
      //
    }
     catch (IOException e)
    {
      //
    }
  }

   private  Element element(Document document)
  {
    Element el = document.createElement(name);
     if (text !=  null )
    {
      Text t = document.createTextNode(text);
      el.appendChild(t);
    }
     if (hasChildren())
    {
       for ( int  i =  0 ; i < countChildren(); i++)
      {
        el.appendChild(getChild(i).element(document));
      }
    }
     return  el;
  }

   public   void  saveToFile(String filename)
  {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     try 
    {
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.newDocument();
      Element el = element(document);
      document.appendChild(el);
      Source source =  new  DOMSource(document);
      File file =  new  File(filename);
      Result result =  new  StreamResult(file);
       try 
      {
        Transformer transformer = TransformerFactory.newInstance().
                                  newTransformer();
        transformer.transform(source, result);
      }
       catch (TransformerConfigurationException e)
      {
        System.out.println(e.toString());
      }
       catch (TransformerException e)
      {
        System.out.println(e.toString());
      }
    }
     catch (ParserConfigurationException x)
    {
      System.out.println(x.toString());
    }

  }

   public   void  dump()
  {
    System.out.println(name+": " + text);
     if (hasChildren())
    {
       for ( int  i =  0 ; i < countChildren(); i++)
      {
        getChild(i).dump(" ");
      }
    }
  }

   private   void  dump(String p)
  {
    System.out.println(p + name+": " + text);
     if (hasChildren())
    {
       for ( int  i =  0 ; i < countChildren(); i++)
      {
        getChild(i).dump(p + " ");
      }
    }
  }
}

...
Рейтинг: 0 / 0
27.06.2006, 17:23
    #33817523
mors78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
Думаю через JAXB 2.0 прикольнее:

Читалка писалка точнее наоборот :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
 package  techtip;

 import  javax.xml.bind.*;
 import  java.io.*;
 import  java.sql.*;
 import  java.util.*;
 import  techtip.test.*;
 import  javax.xml.parsers.*;

 import  org.w3c.dom.*;
 import  org.xml.sax.*;
 import  javax.xml.transform.TransformerFactoryConfigurationError;

 public   class  TestJAXB {
    
     public   static   void  main(String[] in){
         new  TestJAXB();
    }
    
     public  TestJAXB() {
         try  {
            StorageSQL storageSQL =  new  StorageSQL();
            ArrayList<ValueSQL> storAL =  new  ArrayList<ValueSQL>();
            storAL.add(getValueSQL(ValueSQL.TYPE_SEL, "select * from temp"));
            storAL.add(getValueSQL(ValueSQL.TYPE_DEL, "delete from temp"));
            storageSQL.setStorageAL(storAL);


            DocumentBuilderFactory  docBuidFact = DocumentBuilderFactory.newInstance();
            Document newDocument = docBuidFact.newDocumentBuilder().newDocument();
            JAXBContext context =
                    JAXBContext.newInstance( StorageSQL. class );
            Marshaller marshaller = context.createMarshaller();            
            String fileName = "data.xml";
            FileOutputStream fileOut =  new  FileOutputStream(fileName);                    
            //В файл                        
            marshaller.marshal(storageSQL, fileOut);
            fileOut.close();
            marshaller.marshal(storageSQL,System.out);// newDocument);
            //из файла          
            FileInputStream fileIn =  new  FileInputStream(fileName);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            StorageSQL resSQL = (StorageSQL)unmarshaller.unmarshal(fileIn);
            System.out.println();
            System.out.println(resSQL.getStorageAL().size());
             for  ( int  i =  0 ; i< resSQL.getStorageAL().size();i++){
                System.out.println(resSQL.getStorageAL().get(i));
            }
        }  catch  (Exception ex) {
            ex.printStackTrace();
        }
    }

     private  ValueSQL getValueSQL(String type, String sql) {
        ValueSQL val =  new  ValueSQL();
        val.setTypeSQL(type);
        val.setValueSQL(sql);
         return  val;
    }
    
    }

Хранилище
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 package  techtip.test;

 import  javax.xml.bind.annotation.*;
 import  java.util.*;
@XmlRootElement
 public   class  StorageSQL {
     private  ArrayList<ValueSQL> storageAL =  new  ArrayList<ValueSQL>();    
    
     public   void  setStorageAL(ArrayList<ValueSQL> storageAL){
         this .storageAL = storageAL;
    }
    
     public  ArrayList<ValueSQL> getStorageAL(){
         return   this .storageAL;
    }
    
}

и собственно запросы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
 package  techtip.test;

 public   class  ValueSQL {
     public   static   final  String TYPE_SEL = "SEL";
     public   static   final  String TYPE_DEL = "DEL";
     public   static   final  String TYPE_UPDATE = "UPDATE";
    /** Creates a new instance of ValueSQL */
     private  String valueSQL;
     private  String typeSQL;
    
     public  ValueSQL() {
    }
    
     public   void  setValueSQL(String valueSQL){
         this .valueSQL = valueSQL;        
    }
    
     public   void  setTypeSQL(String typeSQL){
         this .typeSQL = typeSQL;
    }
    
     public  String getValueSQL(){
         return   this .valueSQL;        
    }
    
     public  String getTypeSQL(){
         return   this .typeSQL;
    }
    
     public  String toString(){
         return   this .getTypeSQL()+" "+ this .getValueSQL();
    }
    
}

...
Рейтинг: 0 / 0
27.06.2006, 18:11
    #33817655
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
Во-первых мне надо только читать
Во-вторых получается что для поиска необходимого надо будет самому идти по списку чего-либо. Напрашивается вопрос: возможно ли выбрать узел с содержимым у которого скажем <ID>125</ID> или атрибут ID = 125. Т.е. не перебирать все элементы и смотреть значения, а средствами API выбрать необходимый узел с подузлами?
...
Рейтинг: 0 / 0
27.06.2006, 18:18
    #33817667
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
возможно ли выбрать узел с содержимым у которого скажем <ID>125</ID> или
атрибут ID = 125. Т.е. не перебирать все элементы и смотреть значения, а
средствами API выбрать необходимый узел с подузлами?
---------------

тогда парсить в DOM и искать через XPath


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
28.06.2006, 11:05
    #33818629
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
пишу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder;
    Document document;
    Element element;
     try  {
        documentBuilder = factory.newDocumentBuilder();
        document = documentBuilder.parse("dbquery.xml");
    }  catch  (ParserConfigurationException ex) {
        getLog().error("ParserConfigurationException");
    }  catch  (SAXException ex) {
        getLog().error("SAXException");
    }  catch  (IOException ex) {
        getLog().error("IOException", ex);
    }
в логах вижу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
java.net.MalformedURLException: no protocol: dbquery.xml
	at java.net.URL.<init>(Unknown Source)
	at java.net.URL.<init>(Unknown Source)
	at java.net.URL.<init>(Unknown Source)
	at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java: 231 )
	at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java: 197 )
	at oracle.xml.jaxp.JXDocumentBuilder.parse(JXDocumentBuilder.java: 155 )
	at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
и т.д.
Спрашивается что не так или просто файл не находится?
...
Рейтинг: 0 / 0
28.06.2006, 11:06
    #33818635
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
Блин лажу спорол. Там же File
Виноват.
...
Рейтинг: 0 / 0
28.06.2006, 11:53
    #33818834
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
Вот смотрю и вижу getElementById(String elementId). Этим кто-нибудь пользовался? Как сказать, что атрибут isID в случае исли, например xml файл следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="UTF-8"?>
<component>
  <dbquery ID="100">
    <name>quDogovor</name>
    <selectSQL>
    select * from dual
    </selectSQL>
  </dbquery>
  <dbquery ID="101">
    <name>quDogovor2</name>
    <selectSQL>
    select * from dual
    </selectSQL>
  </dbquery>
</component>
...
Рейтинг: 0 / 0
28.06.2006, 12:16
    #33818920
diablero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
Объясните популярно, как этим пользоваться и подгонять под свою структуру ?
...
Рейтинг: 0 / 0
28.06.2006, 12:58
    #33819042
am_sasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
для этого надо схему или дтд файл делать с описанием семантики. для дтд типа так
Код: plaintext
1.
2.
3.
<!ELEMENT component  (dbquery+)>
<!ELEMENT dbquery (name?,selectSQL?)>
<!ATTLIST dbquery ID ID #REQUIRED>
а в файл хмл запихай типа тово
Код: plaintext
1.
2.
3.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component  SYSTEM "my.dtd">
.....
не проверял
...
Рейтинг: 0 / 0
28.06.2006, 13:16
    #33819084
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
хранить всё в текстовых файлах и не заниматься ерундой


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
28.06.2006, 13:40
    #33819154
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
am_sasaдля этого надо схему или дтд файл делать с описанием семантики. для дтд типа так
Код: plaintext
1.
2.
3.
<!ELEMENT component  (dbquery+)>
<!ELEMENT dbquery (name?,selectSQL?)>
<!ATTLIST dbquery ID ID #REQUIRED>
а в файл хмл запихай типа тово
Код: plaintext
1.
2.
3.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component  SYSTEM "my.dtd">
.....
не проверял
вроде заработало, спасибо. Окончательный файл dtd:
Код: plaintext
1.
2.
3.
4.
5.
<!ELEMENT component  (dbquery+)>
<!ELEMENT dbquery (name?,selectSQL?)>
<!ATTLIST dbquery id ID #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT selectSQL (#PCDATA)>
...
Рейтинг: 0 / 0
28.06.2006, 13:54
    #33819191
ГОСТЬ!!!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
am_sasaдля этого надо схему или дтд файл делать с описанием семантики. для дтд типа так
Пояните мне это, я в этом не шарю
...
Рейтинг: 0 / 0
28.06.2006, 14:13
    #33819252
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
dbquery.xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component SYSTEM "dbquery.dtd">
<component>
  <dbquery id="q100">
    <name>quDogovor</name>
    <selectSQL>
    select * from dual
    </selectSQL>
  </dbquery>
  <dbquery id="q101">
    <name>quDogovor2</name>
    <selectSQL>
    select * from dual
    </selectSQL>
  </dbquery>
</component>
dbquery.dtd:
Код: plaintext
1.
2.
3.
4.
5.
<!ELEMENT component  (dbquery+)>
<!ELEMENT dbquery (name?,selectSQL?)>
<!ATTLIST dbquery id ID #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT selectSQL (#PCDATA)>
ферштейн?
http://]http://www.raleigh.ru/tutorials/DTDTutorial/contents.html
...
Рейтинг: 0 / 0
28.06.2006, 19:12
    #33820246
DPH3
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
А не проще сделать класс, описывающий то, что тебе нужно, а потом его сериализовать/десериализовать с помощью, например, XStream?
Заодно и редактирование будет легче сделать.
...
Рейтинг: 0 / 0
29.06.2006, 09:55
    #33820859
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
DPH3А не проще сделать класс, описывающий то, что тебе нужно, а потом его сериализовать/десериализовать с помощью, например, XStream?
Заодно и редактирование будет легче сделать.
Может оно и проще, только как, просто только начал разбираться.
...
Рейтинг: 0 / 0
29.06.2006, 10:35
    #33820992
ГОСТЬ!!!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почти offtop: Чем читать из xml
Мне бы тоже это было интересно
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Почти offtop: Чем читать из xml / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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