Работа с xml-файлами

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#1
Всем привет!
Не особо владею java, но интересует такой вопрос - есть ли методы/классы для работы с xml-файлами средствами SQL-запросов?
Загрузку в БД не предлагать.
 

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#2
именно sql?
xquery или xpath совсем не устраивают?
 

-master-

Well-Known Member
14.01.2012
616
20
#5
поднимайте раздел, он вас ждал ;)
видите какой форум новёхонький, даже репутацию порезали (не всем но и мне и вам досталось, но мы наверстаем), глючноватый местами
правда у всех пыл поостыл, я еще пока трепыхаюсь ... ну да ничего
 

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#7
поднимайте раздел, он вас ждал ;)
видите какой форум новёхонький, даже репутацию порезали (не всем но и мне и вам досталось, но мы наверстаем), глючноватый местами
правда у всех пыл поостыл, я еще пока трепыхаюсь ... ну да ничего
движок, да, классно обновили :bravo:
но за продвижением и развитием это все же не ко мне, я же программист, я могу только клац клац и в продакшен :fyeah:
но поделиться каким никаким опытом всегда готов.

1к сообщение, хм
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#8

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#9
Подскажите набор библиотек?
Какие и где взять?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#10
И еще вопрос - возможно ли менять значения в разных нодах по разным условиям?
Что-то вроде кейса. Очень надо. Помогите
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#12
все же стесняюсь спросить - где скачать найти библиотеку? Облазил много, а не нашел. Только примеры :(
 

Kmet

Well-Known Member
Java Team
25.05.2006
1 036
8
#13
конкретную реализацию рекомендовать не буду, использовал давно, в каком состоянии они сейчас не знаю

варианты
1) Oracle XML Developer's Kit , вроде как имеет приемлемуюю лицензию, но как и все оракловае так просто не скачать, надо регаться, разбираться и т.д.

2) Saxon HE .
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
или как белые люди с мавен репозитория
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться

У этих еще есть платные редакции, на которые можно выклянчить 30 триал, но бесплатная версия выглядит достаточно фичастой

и тд.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#14
я не совсем правильно описал вопрос с case.
Пробовал разбираться. Вот такая конструкция меняет все теги value где атрибут NAME родителя равен "TEST"
Java:
for $x in doc("file.xml")/root/card
where $x/row[@NAME="r1"]/VALUE="TEST"
return replace value of node $x/row[@NAME="r1"]/value with "1111"
Так вот задача.... мне надо указывать разные value для разных NAME и вернуть это одним результатом
 

garrick

Well-Known Member
Lotus team
26.10.2009
877
75
#16
Подскажите набор библиотек?
Какие и где взять?
Я в Lotus Notes использую всё штатное, всё это есть в лотусовой JVM
Java:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
Маленький пример (xmlText - это String с разбираемым XML текстом):
Java:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this!
DocumentBuilder builder = domFactory.newDocumentBuilder();
InputStream source = new ByteArrayInputStream(xmlText.getBytes("UTF-8"));
Document doc = builder.parse(source);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
String xpathQuery = "//error/text()";
String errorText = xpath.evaluate(xpathQuery, doc);
if (errorText.equals("")) {
   ...
}
[code]
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#18
мм... есть xml-файл
HTML:
<root><card>
<block>
<block>
	<row name="r1">param1</row>
	<row name="r2"></row>
	<row name="a3"></row>
</block>
<block>
	<row name="r1">param2</row>
	<row name="r2"></row>
	<row name="a3"></row>
</block>
<block>
	<row name="r1">param3</row>
	<row name="r2"></row>
	<row name="a3"></row>
</block>
</root></card>
У всех блоков в теге с именем r1 содержатся разные значения.
Задача - во всех блоках в теге с именем r3 заполнить свое значение.
Для каждого значения r1 есть свое значение r3.
Таких соответствий положим 100.

Результатом должен быть набор всех этих измененных блоков (допускается, что блоков может быть меньше исходного количества)
HTML:
<root><card>
<block>
	<row name="r1">param1</row>
	<row name="r2"></row>
	<row name="a3">val1</row>
</block>
<block>
	<row name="r1">param2</row>
	<row name="r2"></row>
	<row name="a3">val2</row>
</block>
<block>
	<row name="r1">param3</row>
	<row name="r2"></row>
	<row name="a3">val3</row>
</block>
</root></card>
 
Последнее редактирование модератором:

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#20
Может быть
Чтобы видеть этот контент необходимо: Войти или зарегистрироваться
? Если все возможные соответствия r1/r3 заранее известны и их можно описать в шаблоне, я бы наверное сделал так.
пробовал... но есть нюансы:
это должен быть софт, простой для использования, а не простыни xslt.
Это я к пример у написал соответствие двух строк. В действительности может быть отношение один ко многим.
Блоков может быть 50-60 тысяч.
Я понимаю, что эта задача для БД, но пока не получается ее спихнуть... вот и выкручиваюсь :(