powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Условие внутри условия в Xpath.
9 сообщений из 9, страница 1 из 1
Условие внутри условия в Xpath.
    #39107082
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Возможно ли в 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
Условие внутри условия в Xpath.
    #39107527
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в принципе через цикл пока сделал.
Но вопрос мне интересен.

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

Подозреваю, что в Xpath такое не реализуемо. Однако может я просто не знаю, и решение имеется.
...
Рейтинг: 0 / 0
Условие внутри условия в Xpath.
    #39108105
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek1. Условие внутри условия. Разрешены ли ?Да
ProBiotek2. То, что в условии будет не строгое равенство (@a=@b), а аналог операции In/Exist (@a in (select from @B)).немного непонятно. Покажите XML и, что нужно вітянуть
...
Рейтинг: 0 / 0
Условие внутри условия в Xpath.
    #39108667
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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
Условие внутри условия в Xpath.
    #39108823
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по сути тут происходит Inner Join :) Связка один к одному.
...
Рейтинг: 0 / 0
Условие внутри условия в Xpath.
    #39109224
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekВсе работает, но хочется, чтобы все было одних XPath'ом.Нельзя одним запросом вытащить два набора узлов
...
Рейтинг: 0 / 0
Условие внутри условия в Xpath.
    #39109342
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

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

Это все не реализуемо ?
...
Рейтинг: 0 / 0
Условие внутри условия в Xpath.
    #39132436
Фридрих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Условие внутри условия в Xpath.
    #39139082
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток
Фридрих , да, спасибо работает
Код: 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
9 сообщений из 9, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Условие внутри условия в Xpath.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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