Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Условие внутри условия в Xpath. / 9 сообщений из 9, страница 1 из 1
18.11.2015, 18:10
    #39107082
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
Привет.

Возможно ли в Xpath писать условие внутри условия ? Некий аналог операции In/Exist.

У меня есть некий Node1 - ссылка на него. Это все, что я имею для начала. У него есть несколько Childs1. Их имена константные. Т.е, это некий справочник с заранее известными элементами.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<Node1>
 <Element id = "111">
   ...
 <Element>
 <Element id = "222">
   ...
 <Element>
 <Element id = "333">
   ...
 <Element>
</Node1>


Мне нужно найти Childs2 в Node2 у который аттрибут Id элементов, полученных из Childs1.


Сейчас мне приходится в коде это реализовывать через цикл. Который сначала делает SelectNodes и вытаскивает все Childs1. А затем уже вызывать отдельные Xpath для каждого из них.

Очень хотелось бы получить более красивое решение, когда один Xpath сам достает все, что нужно.
...
Рейтинг: 0 / 0
19.11.2015, 11:32
    #39107527
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
Я в принципе через цикл пока сделал.
Но вопрос мне интересен.

Подозреваю, что так сделать не получится ?
Вообще, проблемы 2:
1. Условие внутри условия. Разрешены ли ?
2. То, что в условии будет не строгое равенство (@a=@b), а аналог операции In/Exist (@a in (select from @B)).

Подозреваю, что в Xpath такое не реализуемо. Однако может я просто не знаю, и решение имеется.
...
Рейтинг: 0 / 0
19.11.2015, 18:09
    #39108105
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
ProBiotek1. Условие внутри условия. Разрешены ли ?Да
ProBiotek2. То, что в условии будет не строгое равенство (@a=@b), а аналог операции In/Exist (@a in (select from @B)).немного непонятно. Покажите XML и, что нужно вітянуть
...
Рейтинг: 0 / 0
20.11.2015, 11:01
    #39108667
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
_Vasilisk_,

Структура такая.

Код: 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.
<Node1>
 <Element id = "111">
   ...
 <Element>
 <Element id = "222">
   ...
 <Element>
 <Element id = "333">
   ...
 <Element>
</Node1>


<Node2>
 <Data id = "111">
   ...
 <Data>
 <Data id = "222">
   ...
 <Data>
 <Data id = "333">
   ...
 <Data>
 <Data id = "444">
   ...
 <Data>
</Node2>




Node1 - это некий элемент, который я получаю на вход.
Нужно собрать все его Elements.

Затем нужно найти тэг Node2 XPath: имя известно (константа) и известен его атрибут ID. И затем нужно вытащить все его Datas у которых ID совпадает с теми, что были уже взяты из Elements (таким образом, в представленном XML, не должен быть извлечен Data с id="444")
Поэтому я и сказал, что нужен некий аналог операции IN из SQL.

Сейчас я это делаю через циклы в C# - иду по собранным Elements и извлекаю по одному элементы Data.
Все работает, но хочется, чтобы все было одних XPath'ом.
...
Рейтинг: 0 / 0
20.11.2015, 12:24
    #39108823
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
по сути тут происходит Inner Join :) Связка один к одному.
...
Рейтинг: 0 / 0
20.11.2015, 16:10
    #39109224
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
ProBiotekВсе работает, но хочется, чтобы все было одних XPath'ом.Нельзя одним запросом вытащить два набора узлов
...
Рейтинг: 0 / 0
20.11.2015, 17:53
    #39109342
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
_Vasilisk_,

Ну мне нужен набор из элементов Data. Но их ID должны соответствовать тем, что в тэгах Element. А всю цепочку начинаем раскручивать начиная с одного нода: Node1.

Это все не реализуемо ?
...
Рейтинг: 0 / 0
19.12.2015, 22:26
    #39132436
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
ProBiotek,
не уверен что правильно понял задачу, но сделал одним Xpath выражением, правда пришлось малость подправить сам XML и использовал XSL для проверки
Код: 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.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="root.xsl"?>
<table>  
<Node1>
 <Element id = "111">
   <boss>1111</boss>
 </Element>
 <Element id = "222">
  <boss>2222</boss>
 </Element>
 <Element id = "333">
  <boss>3333</boss>
 </Element>
</Node1>

<Node2>
 <Data id = "111">
  <boss>1111</boss>
 </Data>
 <Data id = "222">
  <boss>2222</boss>
 </Data>
 <Data id = "333">
  <boss>3333</boss>
 </Data>
 <Data id = "444">
  <boss>4444</boss>
 </Data>
</Node2>
</table>


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<ff>
   <xsl:copy-of select="table/Node2/Data[@id = ../../Node1/Element/@id]"/>
</ff>
</xsl:template>

</xsl:stylesheet>



table/Node2/Data[@id = ../../Node1/Element/@id]
...
Рейтинг: 0 / 0
28.12.2015, 09:44
    #39139082
anvg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие внутри условия в Xpath.
Доброе время суток
Фридрих , да, спасибо работает
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Sub testsel()
    Dim pDoc As New MSXML2.DOMDocument60, pItems As MSXML2.IXMLDOMSelection
    Dim pItem As MSXML2.IXMLDOMElement
    pDoc.Load "c:\Path\text.xml"
    Set pItems = pDoc.SelectNodes("/table/Node2/Data[@id=/table/Node1/Element/@id]")
    For Each pItem In pItems
        Debug.Print pItem.getAttribute("id")
    Next
End Sub
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Условие внутри условия в Xpath. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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