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

NickProstoNick

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

Kmet

Well-known member
25.05.2006
904
8
BIT
0
именно sql?
xquery или xpath совсем не устраивают?
 
M

-master-

@Kmet, приветствуем бродяг, вернувшихся к очагу :)
 
M

-master-

поднимайте раздел, он вас ждал ;)
видите какой форум новёхонький, даже репутацию порезали (не всем но и мне и вам досталось, но мы наверстаем), глючноватый местами
правда у всех пыл поостыл, я еще пока трепыхаюсь ... ну да ничего
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
link removed или link removed первый наверное вам подойдёт больше.
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
поднимайте раздел, он вас ждал ;)
видите какой форум новёхонький, даже репутацию порезали (не всем но и мне и вам досталось, но мы наверстаем), глючноватый местами
правда у всех пыл поостыл, я еще пока трепыхаюсь ... ну да ничего

движок, да, классно обновили :bravo:
но за продвижением и развитием это все же не ко мне, я же программист, я могу только клац клац и в продакшен :fyeah:
но поделиться каким никаким опытом всегда готов.

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Подскажите набор библиотек?
Какие и где взять?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
И еще вопрос - возможно ли менять значения в разных нодах по разным условиям?
Что-то вроде кейса. Очень надо. Помогите
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
xquery c 1.1 есть switch\case
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
все же стесняюсь спросить - где скачать найти библиотеку? Облазил много, а не нашел. Только примеры :(
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
конкретную реализацию рекомендовать не буду, использовал давно, в каком состоянии они сейчас не знаю

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

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

и тд.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
я не совсем правильно описал вопрос с 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 и вернуть это одним результатом
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
не очень понимаю в чем проблема
xquery поддерживает функции link removed

убрать фильтра из where и подставлять value из функции от NAME
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
Подскажите набор библиотек?
Какие и где взять?
Я в 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 851
27
BIT
0
мм... есть 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>
 
Последнее редактирование модератором:

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
Может быть ? Если все возможные соответствия r1/r3 заранее известны и их можно описать в шаблоне, я бы наверное сделал так.
 

NickProstoNick

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!