Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Большой xml чтение некорректно работает, Xml больше 30 MB  
V
    Опции темы
izver84
Дата 6.7.2016, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: нет
Всего: 1



Добрый день.

Получаю с сервера xml файл

Код

<?xml version="1.0" encoding="cp866" ?>
<Import xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Factures>
 <dec>  
<DataFact>05.07.2016</DataFact>
<NumberFact>1208230</NumberFact>
    <row>        
         <Cod>2506</Cod>        
              <Kol>1820</Kol>        
    </row>
     <row>        
        <Cod>2504</Cod>        
         <Kol>2800</Kol>
    </row>
    <row>
        <Cod>2311</Cod>        
         <Kol>2268</Kol>
    </row>
     <row>        
         <Cod>2395</Cod>
           <Kol>3600</Kol>        
    </row>    
</dec>
<dec> 
***************** 
</dec>
</Factures>
</Import>


Код  программы
//определение файла
Код
    
  File []fList;   
  File dir = new File("/home/pavelp/1cBase/ExtForms/");
  fList = F.listFiles();
 String namef="Example.xml";
File file  = new File(F+"/"+namef);
String fi=file.toString();                



//Чтение файла (parser)
Код

      private static void xmlst3(String in)
            {
                try {                 
                    File fXmlFile = new File(in);
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(fXmlFile);
                    doc.getDocumentElement().normalize();
                    NodeList nList = doc.getElementsByTagName("dec");
                    for (int temp = 0; temp < nList.getLength(); temp++) {                 
                        Node nNode = nList.item(temp);                 
                        if (nNode.getNodeType() == Node.ELEMENT_NODE) {                 
                            Element eElement = (Element) nNode;                 
                             //    wdata=дата wdata=eElement.getElementsByTagName("DataFact").item(0).getTextContent();                            
                            //wnd-номер            
                             
                            wnd=eElement.getElementsByTagName("NumberFact").item(0).getTextContent();
                        
                            NodeList nList2 = doc.getElementsByTagName("row");                            
                        
                            for (int temp2 = 0; temp2 < nList2.getLength(); temp2++) {

                                Node nNode2 = nList2.item(temp2);
                                if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
                                    Element eElement2 = (Element) nNode2;
                                    wCod=eElement2.getElementsByTagName("Cod").item(0).getTextContent();
                                    kol=Double.parseDouble(eElement2.getElementsByTagName("Kol").item(0).getTextContent().toString());
                                    }
                            System.out.println(wdata+" "+wnd+" "+wCod+" "+kol);
                            }
                        
                        }
                    }
                    } catch (Exception e) {
                    e.printStackTrace();
                    }
            }



Если Файл  несколко киллобайт, то всё коректно работает. В основном файл имеет объем более 25 МВ. 
Тогда Программа не корректно определяет значения.


Как  читать большие xml файлы?




--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
LSD
Дата 6.7.2016, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 5
Всего: 537



Что-то мне это кажется сомнительным, что парсер работает некорректно с большими файлами. OutOfMemoryError - это да, легко возможно.

А что именно некорректно работает?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
_zorn_
Дата 6.7.2016, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



libxml
Сталкивался с таким на пхп. Даже пулреквест для симфонии отправлял (немного не по феншую, приняли по ошибке, но потом переделали).
Копать в сторону XML_PARSE_HUGE
PM MAIL   Вверх
izver84
Дата 6.7.2016, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: нет
Всего: 1



Цитата(LSD @ 6.7.2016,  11:56)
Что-то мне это кажется сомнительным, что парсер работает некорректно с большими файлами. OutOfMemoryError - это да, легко возможно.

А что именно некорректно работает?


Если отталкиваться от моего примера, то результат такой 

Код

05.07.2016  1208230 2506 1820 
05.07.2016  1208230 2504 2800
05.07.2016  1208230 2311 2268
05.07.2016  1208230 2395 3600



Протестировал с файлом больше 200 Кб

Результат
Код

05.07.2016  1208230 555 180 
05.07.2016  1208230 2504 41
05.07.2016  1208230 2311 441
05.07.2016  1208230 2395 30
05.07.2016  1208230 6 1820 
05.07.2016  1208230 4 2800
05.07.2016  1208230 321 2268
05.07.2016  1208230 395 3600
.....................................
05.07.2016  1208233 3495 360









--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
zera
Дата 6.7.2016, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

Репутация: 1
Всего: 9



как-то совершенно непонятно какие выводы надо сделать из приведенных результатов, но тоже склоняюсь к тому, что нужно saxParser, а не domParser
PM MAIL   Вверх
LSD
Дата 7.7.2016, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 5
Всего: 537



Цитата(izver84 @  6.7.2016,  15:21 Найти цитируемый пост)
Результат

Я вот тоже не понимаю, что надо в этом результате увидеть.
Выкладывай уж файл целиком.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
izver84
Дата 24.8.2016, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: нет
Всего: 1



Код
Код


import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Xml_read {
       public static String  public static String wdata,wnd,wCod,wdepozitul_destinatarului,wCod_Incomlac_destinatarului="";
        public static Double kol=0.0;
        public static Integer row=0; 
        public static InputStream inStream = null;
        public static OutputStream outStream = null;

        private static void xmlst3(String in)
        {
           try {
                 File fXmlFile = new File(in);
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(fXmlFile);
                    doc.getDocumentElement().normalize();
                    NodeList nList = doc.getElementsByTagName("dec");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                            Element eElement = (Element) nNode;
                            wdata=eElement.getElementsByTagName("DataPrezentari").item(0).getTextContent();
                            wdata=wdata.substring(8,10)+wdata.substring(3,5)+wdata.substring(0,2);
                            wnd=eElement.getElementsByTagName("NumarulFact").item(0).getTextContent();
                            wdepozitul_destinatarului=eElement.getElementsByTagName("depozitul_destinatarului").item(0).getTextContent();
                            wdepozitul_destinatarului=wdepozitul_destinatarului.replaceAll("\"", " ");
                            wCod_Incomlac_destinatarului=eElement.getElementsByTagName("Cod_Incomlac_destinatarului").item(0).getTextContent();
                            if(wCod_Incomlac_destinatarului.trim().length()==0){
                                wCod_Incomlac_destinatarului="9999";
                            }
                            
                            NodeList nList2 = doc.getElementsByTagName("linie");
                            for (int temp2 = 0; temp2 < nList2.getLength(); temp2++) {
                                Node nNode2 = nList2.item(temp2);
                                if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
                                    Element eElement2 = (Element) nNode2;
                                    wCod=eElement2.getElementsByTagName("Cod").item(0).getTextContent();
                                
                                }
                                    System.out.println(wdata+" "+wnd+" "+wdepozitul_destinatarului+" "+wCod_Incomlac_destinatarului.trim().substring(wCod_Incomlac_destinatarului.length()-2,wCod_Incomlac_destinatarului.length())+" "+wCod);
                            }
                            }
                    }
           } catch (Exception e) {
                    e.printStackTrace();
                    }
        }
        
        
    public static void main(String[] args) {        
        wdata="";        
        wCod="";
        wdepozitul_destinatarului="";
        wCod_Incomlac_destinatarului="";
        wnd="";             
        File file  = new File("test_in.xml");
        String fi=file.toString();
        xmlst3(fi);
    }

}


пример есть тег <NumarulFact>1215663</NumarulFact>
для него реально значение тега <Cod>
2851
2862
2311
2326
3801

а результат 
Код

3801
3801
2851
2850
2841
733
742
746
750
751
752
765
785
786
837
720
3505
4
5




--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
izver84
Дата 24.8.2016, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: нет
Всего: 1



Сам файл 

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  test_in.xml.zip 958,94 Kb


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
zera
Дата 24.8.2016, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

Репутация: 1
Всего: 9



структура xml?
PM MAIL   Вверх
izver84
Дата 24.8.2016, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: нет
Всего: 1



Цитата(zera @ 24.8.2016,  16:06)
структура xml?

Извеняюсь не успеваю
В xml  находиться данные по накладным
Имеем дерово 
Тег <Import xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">,
который содержит группу <Factures>  (накладные).
В свою очередь группа <Factures> имеет группу <dec> (документ).
Тег <dec> </dec> содержит даеные по документу
заголовок документа
<DataPrezentari>01.08.2016</DataPrezentari> дата документа 
<NumarulFact>1215662</NumarulFact> номер документа
<depozitul_destinatarului>SA"JLC"Chisinau</depozitul_destinatarului> адрес получателя
<Cod_Incomlac_destinatarului>125380000</Cod_Incomlac_destinatarului> код получателя

дальше  строки документа 
<linie> </linie> содержимое  строки документа
<Cod>3801</Cod> код товара
<Cantitatea>1540</Cantitatea> кол-во товара 
остально меня не интересует

Сделал другой файл который содержит только два документа 

Код

<?xml version="1.0" encoding="cp866" ?>
<Import xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Factures>
<dec>
<CodFiscal>1002602006326</CodFiscal>
<DataPrezentari>01.08.2016</DataPrezentari>
<DataEliberarii>01.08.2016</DataEliberarii>
<DataLivrarii>01.08.2016</DataLivrarii>
<NumarulFact>1215662</NumarulFact>
<SeriaFact>IC</SeriaFact>
<CodFiscalCump>1002600005059</CodFiscalCump>
<ValoareaTotalaTVA>192475.19</ValoareaTotalaTVA>
<SumaTotalaTVA>38495.03</SumaTotalaTVA>
<Cod_depozit>115</Cod_depozit>
<depozit>Склад мороженного</depozit>
<Punct_incarcare></Punct_incarcare>
<Cod_depozitul_destinatarului>6130</Cod_depozitul_destinatarului>
<Cod_Incomlac_destinatarului>125380000</Cod_Incomlac_destinatarului>
<depozitul_destinatarului>SA"JLC"Chisinau</depozitul_destinatarului>
<Punct_descarcare></Punct_descarcare>
    <linie>
        <NumarulLinie>1</NumarulLinie>
        <Cod>3801</Cod>
        <Denumire>Сutie carton</Denumire>
        <Cantitatea>1540</Cantitatea>
        <UnitateDeMasura>buc</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>0</PretFaraTVA>
        <SumaFaraTVA>0</SumaFaraTVA>
        <RataDeTVA>0</RataDeTVA>
        <TVA>0</TVA>
        <SumaTVA>0</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>1540</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>2</NumarulLinie>
        <Cod>2851</Cod>
        <Denumire>Inghet"JOC"alb.  pah.gofra60gr.4.200</Denumire>
        <Cantitatea>2520</Cantitatea>
        <UnitateDeMasura>kg</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>18.0556</PretFaraTVA>
        <SumaFaraTVA>45500.11</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>9100.02</TVA>
        <SumaTVA>54600.13</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>2520</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>3</NumarulLinie>
        <Cod>2329</Cod>
        <Denumire>InghetPlomb"Clasic"CIOCbric80g*40b3.2k</Denumire>
        <Cantitatea>480</Cantitatea>
        <UnitateDeMasura>kg</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>31.66671</PretFaraTVA>
        <SumaFaraTVA>15200.02</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>3040</TVA>
        <SumaTVA>18240.02</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>480</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>4</NumarulLinie>
        <Cod>2507</Cod>
        <Denumire>Ing."PLOMBIR"alb300grpah.carton.</Denumire>
        <Cantitatea>3500</Cantitatea>
        <UnitateDeMasura>buc</UnitateDeMasura>
        <Greutatea_unitate>0.3</Greutatea_unitate>
        <PretFaraTVA>11.05</PretFaraTVA>
        <SumaFaraTVA>38675</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>7735</TVA>
        <SumaTVA>46410</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>1050</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>5</NumarulLinie>
        <Cod>2499</Cod>
        <Denumire>Ing"Dulce Caprice" top cioc 0.3kg</Denumire>
        <Cantitatea>1400</Cantitatea>
        <UnitateDeMasura>шт</UnitateDeMasura>
        <Greutatea_unitate>0.3</Greutatea_unitate>
        <PretFaraTVA>15</PretFaraTVA>
        <SumaFaraTVA>21000</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>4200</TVA>
        <SumaTVA>25200</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>420</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>6</NumarulLinie>
        <Cod>2498</Cod>
        <Denumire>Ing"Dulce Caprice" caramela 0.3kg</Denumire>
        <Cantitatea>1260</Cantitatea>
        <UnitateDeMasura>шт</UnitateDeMasura>
        <Greutatea_unitate>0.3</Greutatea_unitate>
        <PretFaraTVA>15</PretFaraTVA>
        <SumaFaraTVA>18900</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>3780</TVA>
        <SumaTVA>22680</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>378</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>7</NumarulLinie>
        <Cod>2625</Cod>
        <Denumire>Inghet"ORIGINAL"brichet 0.65gr. 3.9kg</Denumire>
        <Cantitatea>1365</Cantitatea>
        <UnitateDeMasura>kg</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>38.9744</PretFaraTVA>
        <SumaFaraTVA>53200.06</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>10640.01</TVA>
        <SumaTVA>63840.07</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>1365</Masa_bruta>
    </linie>
</dec>
<dec>
<CodFiscal>1002602006326</CodFiscal>
<DataPrezentari>01.08.2016</DataPrezentari>
<DataEliberarii>01.08.2016</DataEliberarii>
<DataLivrarii>01.08.2016</DataLivrarii>
<NumarulFact>1215663</NumarulFact>
<SeriaFact>IC</SeriaFact>
<CodFiscalCump>1002600005059</CodFiscalCump>
<ValoareaTotalaTVA>348516.77</ValoareaTotalaTVA>
<SumaTotalaTVA>69703.35</SumaTotalaTVA>
<Cod_depozit>115</Cod_depozit>
<depozit>Склад мороженного</depozit>
<Punct_incarcare></Punct_incarcare>
<Cod_depozitul_destinatarului>6130</Cod_depozitul_destinatarului>
<Cod_Incomlac_destinatarului>125380000</Cod_Incomlac_destinatarului>
<depozitul_destinatarului>SA"JLC"Chisinau</depozitul_destinatarului>
<Punct_descarcare></Punct_descarcare>
    <linie>
        <NumarulLinie>1</NumarulLinie>
        <Cod>2851</Cod>
        <Denumire>Inghet"JOC"alb.  pah.gofra60gr.4.200</Denumire>
        <Cantitatea>5040</Cantitatea>
        <UnitateDeMasura>kg</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>18.0556</PretFaraTVA>
        <SumaFaraTVA>91000.22</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>18200.04</TVA>
        <SumaTVA>109200.26</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>5040</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>2</NumarulLinie>
        <Cod>2862</Cod>
        <Denumire>*Inghet"PLOMBIR"CremBrule 70g.in polipr</Denumire>
        <Cantitatea>1960</Cantitatea>
        <UnitateDeMasura>kg</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>25.3571</PretFaraTVA>
        <SumaFaraTVA>49699.92</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>9939.98</TVA>
        <SumaTVA>59639.9</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>1960</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>3</NumarulLinie>
        <Cod>2850</Cod>
        <Denumire>Inghet"JOC"ciocol pah.gofra60gr.4.200kg</Denumire>
        <Cantitatea>2100</Cantitatea>
        <UnitateDeMasura>kg</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>18.0556</PretFaraTVA>
        <SumaFaraTVA>37916.76</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>7583.35</TVA>
        <SumaTVA>45500.11</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>2100</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>4</NumarulLinie>
        <Cod>2311</Cod>
        <Denumire>Inghet"ESKIMO"br(Frigo)70gr 3.780kg</Denumire>
        <Cantitatea>3780</Cantitatea>
        <UnitateDeMasura>kg</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>32.8571</PretFaraTVA>
        <SumaFaraTVA>124199.84</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>24839.97</TVA>
        <SumaTVA>149039.81</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>3780</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>5</NumarulLinie>
        <Cod>2326</Cod>
        <Denumire>Inghet"SUPER Original"cu top.baileys.80g</Denumire>
        <Cantitatea>960</Cantitatea>
        <UnitateDeMasura>kg</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>47.6042</PretFaraTVA>
        <SumaFaraTVA>45700.03</SumaFaraTVA>
        <RataDeTVA>20</RataDeTVA>
        <TVA>9140.01</TVA>
        <SumaTVA>54840.04</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>960</Masa_bruta>
    </linie>
    <linie>
        <NumarulLinie>6</NumarulLinie>
        <Cod>3801</Cod>
        <Denumire>Сutie carton</Denumire>
        <Cantitatea>3700</Cantitatea>
        <UnitateDeMasura>buc</UnitateDeMasura>
        <Greutatea_unitate>1</Greutatea_unitate>
        <PretFaraTVA>0</PretFaraTVA>
        <SumaFaraTVA>0</SumaFaraTVA>
        <RataDeTVA>0</RataDeTVA>
        <TVA>0</TVA>
        <SumaTVA>0</SumaTVA>
        <Alta_Informatie></Alta_Informatie>
        <Masa_bruta>3700</Masa_bruta>
    </linie>
</dec>
</Factures>
</Import>


результат парсинга
Код

160801 1215662 SA JLC Chisinau 00 3801
160801 1215662 SA JLC Chisinau 00 2851
160801 1215662 SA JLC Chisinau 00 2329
160801 1215662 SA JLC Chisinau 00 2507
160801 1215662 SA JLC Chisinau 00 2499
160801 1215662 SA JLC Chisinau 00 2498
160801 1215662 SA JLC Chisinau 00 2625
160801 1215662 SA JLC Chisinau 00 2851
160801 1215662 SA JLC Chisinau 00 2862
160801 1215662 SA JLC Chisinau 00 2850
160801 1215662 SA JLC Chisinau 00 2311
160801 1215662 SA JLC Chisinau 00 2326
160801 1215662 SA JLC Chisinau 00 3801


160801 1215663 SA JLC Chisinau 00 3801
160801 1215663 SA JLC Chisinau 00 2851
160801 1215663 SA JLC Chisinau 00 2329
160801 1215663 SA JLC Chisinau 00 2507
160801 1215663 SA JLC Chisinau 00 2499
160801 1215663 SA JLC Chisinau 00 2498
160801 1215663 SA JLC Chisinau 00 2625
160801 1215663 SA JLC Chisinau 00 2851
160801 1215663 SA JLC Chisinau 00 2862
160801 1215663 SA JLC Chisinau 00 2850
160801 1215663 SA JLC Chisinau 00 2311
160801 1215663 SA JLC Chisinau 00 2326
160801 1215663 SA JLC Chisinau 00 3801



Получается  программа ищет данные по тегу <linie>
Программа находит все даные в файле а не в  текущем теге <dec>

Код

    try {
                 File fXmlFile = new File(in);
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(fXmlFile);
                    doc.getDocumentElement().normalize();
                    
                    NodeList nList = doc.getElementsByTagName("dec");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        
                        Node nNode = nList.item(temp);
                        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                            Element eElement = (Element) nNode;
                            wdata=eElement.getElementsByTagName("DataPrezentari").item(0).getTextContent();
                            wdata=wdata.substring(8,10)+wdata.substring(3,5)+wdata.substring(0,2);
                            wnd=eElement.getElementsByTagName("NumarulFact").item(0).getTextContent();
                            wdepozitul_destinatarului=eElement.getElementsByTagName("depozitul_destinatarului").item(0).getTextContent();
                            wdepozitul_destinatarului=wdepozitul_destinatarului.replaceAll("\"", " ");
                            wCod_Incomlac_destinatarului=eElement.getElementsByTagName("Cod_Incomlac_destinatarului").item(0).getTextContent();
                            if(wCod_Incomlac_destinatarului.trim().length()==0){
                                wCod_Incomlac_destinatarului="9999";
                            }
                            
                            NodeList nList2 = doc.getElementsByTagName("linie");
                            for (int temp2 = 0; temp2 < nList2.getLength(); temp2++) {
                                Node nNode2 = nList2.item(temp2);
                                if (nNode2.getNodeType() == Node.ELEMENT_NODE) {
                                    Element eElement2 = (Element) nNode2;
                                    wCod=eElement2.getElementsByTagName("Cod").item(0).getTextContent();
                                    
                                }//node line
                                
                                System.out.println(wdata+" "+wnd+" "+wdepozitul_destinatarului+" "+wCod_Incomlac_destinatarului.trim().substring(wCod_Incomlac_destinatarului.length()-2,wCod_Incomlac_destinatarului.length())+" "+wCod);
                                
                            }//line
                            
                            }//node dec
                        
                        
                    }//dec
           } catch (Exception e) {
                    e.printStackTrace();
                    }





Это сообщение отредактировал(а) izver84 - 24.8.2016, 16:48


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
zera
Дата 25.8.2016, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

Репутация: 1
Всего: 9



Цитата(izver84 @  24.8.2016,  16:47 Найти цитируемый пост)
Получается  программа ищет данные по тегу <linie>
Программа находит все даные в файле а не в  текущем теге <dec>

разумеется
потому что NodeList nList2 = doc.getElementsByTagName("linie"); в 24 строке

Добавлено через 33 секунды
ну и нельзя так переменные называть
PM MAIL   Вверх
izver84
Дата 25.8.2016, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: нет
Всего: 1



Цитата(zera @ 25.8.2016,  13:57)
Цитата(izver84 @  24.8.2016,  16:47 Найти цитируемый пост)
Получается  программа ищет данные по тегу <linie>
Программа находит все даные в файле а не в  текущем теге <dec>

разумеется
потому что NodeList nList2 = doc.getElementsByTagName("linie"); в 24 строке

Добавлено @ 13:57
ну и нельзя так переменные называть

Не  nList2 - а как? и поэтому проблемы?
"linie" не я назвал, ко мне так приходит. 



--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
zera
Дата 26.8.2016, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

Репутация: 1
Всего: 9



про имена переменных это уже не в этой теме, а проблема в doc.getElementsByTagName
PM MAIL   Вверх
izver84
Дата 29.8.2016, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: нет
Всего: 1



Цитата(zera @ 26.8.2016,  10:51)
про имена переменных это уже не в этой теме, а проблема в doc.getElementsByTagName

Точно, нашел решение 
вместо 
Код

 NodeList nList2 = doc.getElementsByTagName("linie");

надо 
Код

 NodeList nList2 = eElement.getElementsByTagName("linie");


Все работает.


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
zera
Дата 29.8.2016, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 19.1.2006
Где: saint-petersburg

Репутация: 1
Всего: 9



ну да, теперь это называется "нашел решение" smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1943 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.