Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / XML Config / 16 сообщений из 16, страница 1 из 1
14.07.2016, 17:18
    #39274020
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
Добрый день! Имеется конфиг такого плана:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<configuration>
   <param1>один какой-то параметр</param1>
   <param2>другой какой-то параметр</param2>
   <entries>
      <entry>
         <position>1</position>
         <name>имя1</name>
         <title>Заголовок1</title>
      </entry>
      <entry>
         <position>2</position>
         <name>имя2</name>
         <title>Заголовок2</title>
      </entry>
   </entries>
</configuration>



Чем лучше читать такое? Смотрел Commons Configuration , но не понял как его "готовить" в подобных случаях. Может что-то посоветуете?
...
Рейтинг: 0 / 0
14.07.2016, 17:36
    #39274040
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
можно так XStream
...
Рейтинг: 0 / 0
14.07.2016, 17:36
    #39274041
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
Garrick,
ты его читай только когда нужно = встал на нужную ноду и прочитал параметр.
А перекладывать из файла в оперативку\классы нафиг надо.
...
Тогда ответ - любым XML парсером.
...
Рейтинг: 0 / 0
14.07.2016, 18:26
    #39274077
Паша01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
Я этот xml и без всякой проги прочитать могу
...
Рейтинг: 0 / 0
14.07.2016, 18:45
    #39274090
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
Паша01Я этот xml и без всякой проги прочитать могу
давай, только вслух
...
Рейтинг: 0 / 0
14.07.2016, 22:52
    #39274187
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
chpasha,
))))
...
Рейтинг: 0 / 0
14.07.2016, 23:41
    #39274201
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
groovy

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
String s='''<configuration>
   <param1>один какой-то параметр</param1>
   <param2>другой какой-то параметр</param2>
   <entries>
      <entry>
         <position>1</position>
         <name>имя1</name>
         <title>Заголовок1</title>
      </entry>
      <entry>
         <position>2</position>
         <name>имя2</name>
         <title>Заголовок2</title>
      </entry>
   </entries>
</configuration>'''

groovy.util.Node cfg=new groovy.util.XmlParser().parseText(s)

println cfg.param1.text()
println cfg.entries.entry.find{ it.name.text()=='имя2' }?.title?.text()
...
Рейтинг: 0 / 0
14.07.2016, 23:58
    #39274205
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
написано dom

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
import javax.xml.xpath.XPath;


public class DOM{
    public static Element parse(Object source){
        if(source instanceof String)source=new org.xml.sax.InputSource( new StringReader((String)source) );
        if(source instanceof Reader)source=new org.xml.sax.InputSource((Reader)source);

        javax.xml.parsers.DocumentBuilder builder = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
        return builder.parse((org.xml.sax.InputSource)source).getDocumentElement();
    }

    public static String xpathString(Element node, String expression){
        XPath xpath = javax.xml.xpath.XPathFactory.newInstance().newXPath();
        return xpath.evaluate( expression, node, javax.xml.xpath.XPathConstants.STRING );
    }

    public static NodeList xpathNodes(Element node, String expression){
        XPath xpath = javax.xml.xpath.XPathFactory.newInstance().newXPath();
        return xpath.evaluate(expression, node, javax.xml.xpath.XPathConstants.NODESET);
    }
}


String s='''<configuration>
   <param1>один какой-то параметр</param1>
   <param2>другой какой-то параметр</param2>
   <entries>
      <entry>
         <position>1</position>
         <name>имя1</name>
         <title>Заголовок1</title>
      </entry>
      <entry>
         <position>2</position>
         <name>имя2</name>
         <title>Заголовок2</title>
      </entry>
   </entries>
</configuration>''';

Element e = DOM.parse(s);
System.out.println( DOM.xpathString(e,"/configuration/param2") );
System.out.println( DOM.xpathString(e,"/configuration/entries/entry[name='имя2']/title") );
...
Рейтинг: 0 / 0
15.07.2016, 08:53
    #39274286
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
А получить <entries> в виде какой-нибудь коллекции?
...
Рейтинг: 0 / 0
15.07.2016, 08:59
    #39274289
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
GarrickА получить <entries> в виде какой-нибудь коллекции?
А потом её синхронизировать с файлом двумя кешами как хибер.
...
Рейтинг: 0 / 0
15.07.2016, 09:07
    #39274297
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
Код: java
1.
2.
3.
4.
5.
NodeList entries = DOM.xpathNodes(e,"/configuration/entries/entry")
System.out.println( "count="+entries.getLength() );
for(int i=0;i<entries.getLength();i++){
    System.out.println( "entry="+entries.item(i) );
}
...
Рейтинг: 0 / 0
19.07.2016, 12:18
    #39276158
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
Dmitry., спасибо.

Поковырял, попробовал всякие модные штуки... и в итоге всё сделал с помощью старого, доброго DOM парсера.
...
Рейтинг: 0 / 0
19.07.2016, 15:09
    #39276342
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
GarrickDmitry., спасибо.
Поковырял, попробовал всякие модные штуки... и в итоге всё сделал с помощью старого, доброго DOM парсера.
+1
...
Рейтинг: 0 / 0
06.09.2016, 16:16
    #39304556
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
И снова "здравствуйте".
Поступила новая вводная - добавить в XML конфигурацию переменные, например, как в maven {$....} в pom.xml. Пока только для того, чтобы туда можно было указать имя файла типа - file-{$mmDDyyyy}.out. Чтобы автоматом в имя файла подставлялась "дата изготовления" в указанном формате. Потом возможно и другое, более расширенное, применение. Не подскажите ли, может быть есть какие-то готовые решения для подобных случаев?
...
Рейтинг: 0 / 0
06.09.2016, 17:04
    #39304591
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
Сам спросил - сам отвечу
Apache Commons JEXL
...
Рейтинг: 0 / 0
07.09.2016, 09:14
    #39304857
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML Config
GarrickСам спросил - сам отвечу
Apache Commons JEXL

Хоть и решает поставленную задачу, но не совсем то, что хотелось. Вместо
Код: xml
1.
<filename>report-{$ddMMyyyHHmm}.xlsx</filename>

надо писать
Код: xml
1.
<filename>"report-"+new("java.text.SimpleDateFormat", "ddMMyyyyHHmm").format(new("java.util.Date"))+".xlsx"</filename>


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


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