powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xPath: добраться до элемента хмл-и, вложенной в другую хмл
5 сообщений из 5, страница 1 из 1
xPath: добраться до элемента хмл-и, вложенной в другую хмл
    #38053235
Фотография Hammy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток.

Имеем на входе подобную xml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0"?>
<methodName>
 <params>
   <param>
     <value>
       <array>
         <data>
           <value>
             <int>someValue</int>
           </value>
           <value>
               ...
           </value>
             ......
           <value>nodeName</value>
           <value>java.lang.String</value>
           <value>&lt;?xml version="1.0"?&gt;&lt;node1&gt;&lt;node2&gt;valuenode2&lt;/node2&gt;&lt;node3&gt;valuenode3&lt;/node3&gt;&lt;node4&gt;valuenode4&lt;/node4&gt;&lt;node5&gt;valuenode5&lt;/node5&gt;&lt;/node1&gt;
						</value>
......



Выражением xPath

Код: xml
1.
//value[count(//value[.='nodeName']/preceding-sibling::*)+3]/text()



добираюсь до вложенной ХМЛ (значение ноды nodeName ).

Сама эта хмл имеет вид (из предыдущего выражения xPath):

Код: xml
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0"?>
<node1>
    <node2>valuenode2</node2>
    <node3>valuenode3</node3>
    <node4>valuenode4</node4>
    <node5>valuenode5</node5>
</node1>



Добраться до значение node2 отдельно можно выражением:

Код: xml
1.
/node1/node2/text()

.

Но задача состоит в следующем :
- добраться до значение node2 вложенной хмл, которая ,в свою очередь, находится как значение параметра nodeName исходной хмл, и использовать значение это в другой системе.

Использованные варианты:
1.
Код: xml
1.
substring-before(substring-after(//value[count(//value[.='nodeName']/preceding-sibling::*)+3]/text(), 'node2>'), '</node2>')

- отрабатывает, но не воспринимается другой системой ( "не нравится" синтаксис выражения(().

2. попытка же объединить два вышеуказанных выражения:
Код: xml
1.
//value[count(//value[.='nodeName']/preceding-sibling::*)+3]/text()/node1/node2/text()

- не дает желаемого результата. Проверка выражения проводится в XPathBuilder

Похоже, этой системе "нравиться" только синтаксис, начинающийся с символов "/" или "//" (из варианта, указанного в п.2). Поведение ее изменить не получится - надо подстроить выражение xPath под нее.


Можете подсказать какие-то идеи, в какую сторону смотреть?(

Спасибо за любую инормацию
...
Рейтинг: 0 / 0
xPath: добраться до элемента хмл-и, вложенной в другую хмл
    #38053276
Фотография Hammy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что вложенная ХМЛ xPath-м воспринимается уже как просто строка...(
...
Рейтинг: 0 / 0
xPath: добраться до элемента хмл-и, вложенной в другую хмл
    #38053313
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HammyПохоже, что вложенная ХМЛ xPath-м воспринимается уже как просто строка...(именно так

Вероятно вам надо правильно искать
Код: sql
1.
substring-before(substring-after(//value[count(//value[.='nodeName']/preceding-sibling::*)+3]/text(), '&lt;node2&gt;'), '&lt;/node2&gt;')


а вообще сама идея запихивать один хмл в другой в виде строки - порочна, либо правильно вставляйте, либо заворачивайте в CDATA
...
Рейтинг: 0 / 0
xPath: добраться до элемента хмл-и, вложенной в другую хмл
    #38053359
Фотография Hammy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за наводку. Будем пробовать.

1. Выражение
Код: xml
1.
substring-after(//value[count(//value[.='nodeName']/preceding-sibling::*)+3]/text(), 'node2>')

- отрабатывает,
а если его чучуть видоизменить:

Код: xml
1.
substring-after(//value[count(//value[.='nodeName']/preceding-sibling::*)+3]/text(), 'node2&gt;')

- уже не отрабатывает(

Попробую еще. Если не получиться - будем смотреть в сторону "CDATA"
...
Рейтинг: 0 / 0
xPath: добраться до элемента хмл-и, вложенной в другую хмл
    #38054146
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lanлибо заворачивайте в CDATAНа xmlhack была статья по этому поводу. Там рекомендовали именно уходить от CDATA и вставлять экранированный текст.

Правда там это рассматривалось с точки зрения передачи через XML (а именно RSS) произвольного текста
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xPath: добраться до элемента хмл-и, вложенной в другую хмл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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