Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите распарсить файл XML / 10 сообщений из 10, страница 1 из 1
24.02.2016, 21:06
    #39178160
Chumakov_JA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
Помогите пожалуста распарсить файл XML
Код: xml
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.
<?xml version="1.0" encoding="Windows-1251" standalone="yes"?>
<ФайлПФР>
    <ИмяФайла>PFR-700-Y-2015-M-01-D-16-ORG-071-000-000001-DCK-0001-UK-А014-IP-0000.XML</ИмяФайла>
    <ЗаголовокФайла>
        <ВерсияФормата>PFR-700</ВерсияФормата>
        <ТипФайла>ВНУТРЕННИЙ</ТипФайла>
        <ПрограммаПодготовкиДанных>
            <НазваниеПрограммы>ЕДИНОВРЕМЕННАЯ</НазваниеПрограммы>
            <Версия>PFR-700</Версия>
        </ПрограммаПодготовкиДанных>
        <ИсточникДанных>ПФР</ИсточникДанных>
    </ЗаголовокФайла>
    <ПачкаИсходящихДокументов>
        <СПИСОК_ПОЛУЧАТЕЛЕЙ_ЕВ_ЗА_СЧЕТ_СПН>
            <НаименованиеУК>АЛЬФА-КАПИТАЛ УК</НаименованиеУК>
            <КодУК>А014</КодУК>
            <ИНН>99999999</ИНН>
            <КодИП></КодИП>
            <ВариантРешения>УСТН</ВариантРешения>
            <ДатаФормирования>16.01.2015</ДатаФормирования>
            <Регион>
                <КодРегиона>000</КодРегиона>
                <НаименованиеРегиона>ОПФР</НаименованиеРегиона>
                <КоличествоРайонов>1</КоличествоРайонов>
                <Район>
                    <КодРайона>000</КодРайона>
                    <НаименованиеРайона>ПУ</НаименованиеРайона>
                    <Получатель>
                        <СтраховойНомер>012-345-678 00</СтраховойНомер>
                        <ФИО>
                            <Фамилия>ИВАНОВ</Фамилия>
                            <Имя>ИВАН</Имя>
                            <Отчество>ИВАНЫЧ</Отчество>
                        </ФИО>
                        <Пол>М</Пол>
                        <ДатаРождения>01.10.1959</ДатаРождения>
                        <СуммаЕВ>100.00</СуммаЕВ>
                        <ДатаРешения>08.12.2014</ДатаРешения>
                        <НомерРешения>1</НомерРешения>
                    </Получатель>
                    <СуммаРайон>100.00</СуммаРайон>
                    <КоличествоПолучателейРайон>1</КоличествоПолучателейРайон>
                </Район>
            </Регион>
            <СуммаВсего>100.00</СуммаВсего>
            <КоличествоПолучателейВсего>1</КоличествоПолучателейВсего>
        </СПИСОК_ПОЛУЧАТЕЛЕЙ_ЕВ_ЗА_СЧЕТ_СПН>
    </ПачкаИсходящихДокументов>
</ФайлПФР> 




Нужны данные < СтраховойНомер > < Фамилия > < Имя > < Отчество > < Пол > < ДатаРождения > < СуммаЕВ >

Пробовал 2 варианта

1 вариант
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    InputStream stream = new FileInputStream(new File(fname));
    InputStreamReader sreader = new InputStreamReader(stream, "Windows-1251");       
    File is =new File(fname);    
    SAXReader reader = new SAXReader();
         Document document = reader.read(sreader);

         System.out.println("Root element :" + document.getRootElement().getName());

         Element classElement = document.getRootElement();

         List<Node> nodes = document.selectNodes("???????"); <----  что ставить тут непонятно
         System.out.println("----------------------------");
         for (Node node : nodes) {
            System.out.println("\nCurrent Element :" + node.getName());
            System.out.println("Student roll no : " + node.valueOf("@rollno") );
            System.out.println("Last Name : " + node.selectSingleNode("Фамилия ").getText());
         }


2 вариант
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
	  SAXBuilder builder = new SAXBuilder();
	  File xmlFile = new File(fname);

	  try {

		Document document = (Document) builder.build(xmlFile);
		Element rootNode = document.getRootElement();
                List list = rootNode.getChildren("Район");
		for (int i = 0; i < list.size(); i++) {

		   Element node = (Element) list.get(i);

		   System.out.println("First Name : " + node.getChildText("Фамилия"));
		   System.out.println("Last Name : " + node.getChildText("Имя"));
		   System.out.println("Nick Name : " + node.getChildText("СтраховойНомер"));
		   System.out.println("Salary : " + node.getChildText("СуммаЕВ"));

		}

	  } catch (IOException io) {
		System.out.println(io.getMessage());
	  } catch (JDOMException jdomex) {
		System.out.println(jdomex.getMessage());
	  }



Файл XML прилагаю.
...
Рейтинг: 0 / 0
25.02.2016, 00:37
    #39178243
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
Chumakov_JA,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class XPathExample {

    public static void main(String[] args) throws Exception {
        String fileName = "D:\\PFR-700-Y-2015-M-01-D-16-ORG-071-000-000001-DCK-0001-UK-А014-IP-0000.xml";
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        String path = "/ФайлПФР/ПачкаИсходящихДокументов/СПИСОК_ПОЛУЧАТЕЛЕЙ_ЕВ_ЗА_СЧЕТ_СПН/Регион/Район/Получатель/ФИО/*";
        try (java.io.InputStream file = new java.io.FileInputStream(fileName)) {
            Document document = (Document) db.parse(file);
            XPathFactory xPathfactory = XPathFactory.newInstance();
            XPath xpath = xPathfactory.newXPath();
            XPathExpression expr = xpath.compile(path);
            NodeList nodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
            for (int i = 0; i < nodes.getLength(); i++) {
                Node node = nodes.item(i);
                System.out.printf("[%s] = '%s'%n", node.getNodeName(), node.getTextContent());
            }
        }
    }
}

Дополнительная инфа: https://habrahabr.ru/post/107004/
...
Рейтинг: 0 / 0
25.02.2016, 00:47
    #39178244
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
...
Рейтинг: 0 / 0
25.02.2016, 14:12
    #39178802
Chumakov_JA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
UsmanChumakov_JA,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class XPathExample {

    public static void main(String[] args) throws Exception {
        String fileName = "D:\\PFR-700-Y-2015-M-01-D-16-ORG-071-000-000001-DCK-0001-UK-А014-IP-0000.xml";
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        String path = "/ФайлПФР/ПачкаИсходящихДокументов/СПИСОК_ПОЛУЧАТЕЛЕЙ_ЕВ_ЗА_СЧЕТ_СПН/Регион/Район/Получатель/ФИО/*";
        try (java.io.InputStream file = new java.io.FileInputStream(fileName)) {
            Document document = (Document) db.parse(file);
            XPathFactory xPathfactory = XPathFactory.newInstance();
            XPath xpath = xPathfactory.newXPath();
            XPathExpression expr = xpath.compile(path);
            NodeList nodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
            for (int i = 0; i < nodes.getLength(); i++) {
                Node node = nodes.item(i);
                System.out.printf("[%s] = '%s'%n", node.getNodeName(), node.getTextContent());
            }
        }
    }
}

Дополнительная инфа: https://habrahabr.ru/post/107004/

Спасибо огромное, но помогите ещё.
...
Рейтинг: 0 / 0
25.02.2016, 14:19
    #39178811
Chumakov_JA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;

public class XPathExample {

    public static void main(String[] args) throws Exception {
        String fileName = "D:\\PFR-700-Y-2015-M-01-D-16-ORG-071-000-000001-DCK-0001-UK-А014-IP-0000.xml";
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        String path = "/ФайлПФР/ПачкаИсходящихДокументов/СПИСОК_ПОЛУЧАТЕЛЕЙ_ЕВ_ЗА_СЧЕТ_СПН/Регион/Район/Получатель/*";
        try (java.io.InputStream file = new java.io.FileInputStream(fileName)) {
            Document document = (Document) db.parse(file);
            XPathFactory xPathfactory = XPathFactory.newInstance();
            XPath xpath = xPathfactory.newXPath();
            XPathExpression expr = xpath.compile(path);
            NodeList nodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
            for (int i = 0; i < nodes.getLength(); i++) {
                Node node = nodes.item(i);
                System.out.printf("[%s] = '%s'%n", node.getNodeName(), node.getTextContent());
            }
        }
    }
}



заменил на Получатель/*
получаю
[СтраховойНомер] = '012-345-678 00'
[ФИО] = '
ИВАНОВ
ИВАН
ИВАНЫЧ
'
[Пол] = 'Ж'
[ДатаРождения] = '01.10.1959'
[СуммаЕВ] = '100.00'


а как получить

[СтраховойНомер] = '012-345-678 00'
[Фамилия] = 'ИВАНОВ'
[Имя] = 'ИВАН'
[Отчество] = 'ИВАНЫЧ'
[Пол] = 'М'
[ДатаРождения] = '01.10.1959'
[СуммаЕВ] = '100.00'
...
Рейтинг: 0 / 0
25.02.2016, 14:46
    #39178850
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
Chumakov_JAа как получитьНеобходимо перечислить пути и по каждому отдельно пробежаться:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
String root = "/ФайлПФР/ПачкаИсходящихДокументов/СПИСОК_ПОЛУЧАТЕЛЕЙ_ЕВ_ЗА_СЧЕТ_СПН/Регион/Район/Получатель/";
String[] paths = new String[] { "СтраховойНомер", "ФИО/*", "Пол", "ДатаРождения", "СуммаЕВ", "ДатаРешения", "НомерРешения" };
...
for (String path: paths) {
    XPathExpression expr = xpath.compile(root + path);
    NodeList nodes = (NodeList) expr.evaluate(document, XPathConstants.NODESET);
    for (int i = 0; i < nodes.getLength(); i++) {
        Node node = nodes.item(i);
        System.out.printf("[%s] = '%s'%n", node.getNodeName(), node.getTextContent());
    }
}
...
Рейтинг: 0 / 0
25.02.2016, 15:04
    #39178885
Chumakov_JA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
Спасибо все получилось, простите за назойливость а есть варианты
прямого обращения к узлам ?
...
Рейтинг: 0 / 0
25.02.2016, 15:24
    #39178916
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
Chumakov_JAа есть варианты прямого обращения к узлам ?Сам узел мы получаем здесь:
Код: java
1.
Node node = nodes.item(i);

Не совсем понял вопрос. Вас не устраивает XPath ?
...
Рейтинг: 0 / 0
25.02.2016, 15:33
    #39178934
Chumakov_JA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
Вас не устраивает XPath ?
не то чтобы не устраивает
но хотелось бы другие реализации.
...
Рейтинг: 0 / 0
25.02.2016, 15:40
    #39178956
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите распарсить файл XML
Chumakov_JAно хотелось бы другие реализации Parsing XML using DOM, SAX and StAX Parser in Java
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите распарсить файл XML / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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