2015-06-18 7 views
0

Используя следующий пример, я пытаюсь создать XPath, который будет идентифицировать идентификатор яблок, где их идентификатор ветки совпадает с идентификатором ветки, но treeID не соответствует ветка дерева.XPath для идентификации родителя на основе двух связанных дочерних элементов

, например: // рост [@ тип = "яблоко"] [branchID = // филиал/@ идентификатор]/@ ID - результаты были бы бабка Empire Gala

И // рост [ @ тип = "яблоко"] [treeID = // филиал/treeID]/@ ID - результаты были бы бабка Empire Gala

Но я хочу запрос, который будет возвращать только: бабуся

<xml> 
    <growth type="apple" id="Granny"> 
    <branchID>ABCD</branchID> 
    <treeID>456</treeID> 
    </growth> 
    <growth type="apple" id="Empire"> 
    <branchID>ABCD</branchID> 
    <treeID>123</treeID> 
    </growth> 
    <growth type="apple" id="Gala"> 
    <branchID>EFGH</branchID> 
    <treeID>456</treeID> 
    </growth> 
    <growth type="flower" id="white"> 
    <branchID>EFGH</branchID> 
    <treeID>123</treeID> 
    </growth> 
    <growth type="flower" id="yellow"> 
    <branchID>ABCD</branchID> 
    <treeID>456</treeID> 
    </growth> 
    <branch id="ABCD"> 
    <treeID>123</treeID> 
    </branch> 
    <branch id="EFGH"> 
    <treeID>456</treeID> 
    </branch> 
    <tree id="123" /> 
    <tree id="456" /> 
    <tree id="789" /> 
</xml> 
+0

Почему запрос должен возвращать только 'Granny'? – har07

ответ

1

Таким образом, требуемый элемент (где пара ветвей/дерева ID не существует в элементе ветвления) будет иметь разные значения индекса для идентификатора ветви в списке всех значений // branch/@ id и идентификатора дерева в списке всех // значение ветви/treeID ...

//growth[@type="apple"][index-of(//branch/@id,branchID)!=index-of(//branch/treeID,treeID)]/@id 

Granny 

Хороший вопрос, чтобы дать серенькие клеткам некоторых упражнения на обеденном перерыве в пятницу: о)

+0

Большое спасибо за предложение - оно действительно работало над примером Apple, но не работало над моим фактическим XML ... однако, вы заставили меня идти в правильном направлении, и я бы не разобрался без вашей помощи - так еще раз спасибо! Что я закончил делать: // growth [@ type = "apple"] [not (index-of (// branch/@ id, branchID) = index-of (// branch/treeID, treeID))]/@ id Простое изменение от «! =» до «not (=)» сделало трюк! Благодаря! – Erika

+0

ОК, поэтому запрос работал в редакторе XML ... но не в SQL. Появилась следующая ошибка: XQuery [@ ApplesQuery.blob.exist()]: Нет функции '{http://www.w3.org/2004/07/xpath-functions}: index-of()' Мысли ??? – Erika

+0

Является ли ваша база данных SQL Server случайным образом? К сожалению, это похоже на несколько ограниченную реализацию XPath 2.0 (см. [This] (https://msdn.microsoft.com/en-us/library/ms189254.aspx) и [это] (https://msdn.microsoft .com/en-us/library/ms345122% 28v = sql.90% 29.aspx # sql2k5_xqueryintro_topic11)), и я не придумал другой способ сделать это, я боюсь. –