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


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

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

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

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


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Почти offtop: Чем читать из xml
    #33818629
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пишу:
Код: 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
Почти offtop: Чем читать из xml
    #33818635
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин лажу спорол. Там же File
Виноват.
...
Рейтинг: 0 / 0
Почти offtop: Чем читать из xml
    #33818834
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот смотрю и вижу 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
Почти offtop: Чем читать из xml
    #33818920
diablero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объясните популярно, как этим пользоваться и подгонять под свою структуру ?
...
Рейтинг: 0 / 0
Почти offtop: Чем читать из xml
    #33819042
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">
.....
не проверял
...
Рейтинг: 0 / 0
Почти offtop: Чем читать из xml
    #33819084
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хранить всё в текстовых файлах и не заниматься ерундой


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Почти offtop: Чем читать из xml
    #33819154
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почти offtop: Чем читать из xml
    #33819191
ГОСТЬ!!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
am_sasaдля этого надо схему или дтд файл делать с описанием семантики. для дтд типа так
Пояните мне это, я в этом не шарю
...
Рейтинг: 0 / 0
Почти offtop: Чем читать из xml
    #33819252
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Почти offtop: Чем читать из xml
    #33820246
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще сделать класс, описывающий то, что тебе нужно, а потом его сериализовать/десериализовать с помощью, например, XStream?
Заодно и редактирование будет легче сделать.
...
Рейтинг: 0 / 0
Почти offtop: Чем читать из xml
    #33820859
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3А не проще сделать класс, описывающий то, что тебе нужно, а потом его сериализовать/десериализовать с помощью, например, XStream?
Заодно и редактирование будет легче сделать.
Может оно и проще, только как, просто только начал разбираться.
...
Рейтинг: 0 / 0
Почти offtop: Чем читать из xml
    #33820992
ГОСТЬ!!!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне бы тоже это было интересно
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Почти offtop: Чем читать из xml
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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