xml - XQuery or XPath expression explained -
could break down xquery doing?
'for $i in . return count(../*[. << $i])'
i can tell loop, confused ../*
, []
. in sql code i'm working on. trying extract column-name nodes xml file:
select distinct parent.items.value('for $i in . return count(../*[. << $i])', 'int') [index], parent.items.value('local-name(../.)', 'varchar(100)') 'parentitem', parent.items.value('local-name(.)', 'varchar(100)') 'childitem' dbo.myformresults cross apply xmlformfields.nodes('/form/*') parent(items)
i want xquery iterate through xml nodes in order in xml file. sort of works, double counts , i'm not sure why... maybe if understand loop better can fix problem.
as can see here indexes: 15, 16 , 17 duplicated.
thanks!
for $i in .
a for $x in y return z
expression assigns variable $x
each item in sequence y
in turn , evaluates expression z
, returning sequence concatenation of results evaluations of z
, e.g. for $i in (1, 2, 3) return (2 * $i)
generate sequence (2, 4, 6)
.
in case sequence y
single node - it's idiom capture current value of .
in variable can make use of in deeper predicates, alternative xslt current()
function when you're working xpath 2.0 outside of xslt.
../*[. << $i]
the <<
operator tests relative position of nodes, x << y
true if x
comes before y
in document order.
therefore for $i in . return count(../*[. << $i])
long-winded way of writing count(preceding-sibling::*)
- number of sibling elements of current node (.
, known $y
) come before node in document order.
Comments
Post a Comment