In pure XQuery what you are attempting will not work ... xpath cannot have an
accessor element which is dynamic ...
but you can do something similar.
Note: The following is hand typed by memory , might have typos. Also this
assumes your document is in no namespace.
Changes need to be made to accomidate namespaces.
First off you want to return a QName not an element for getHierarchyElements
declare function oxy:getHierarchyElements() as xs:QName {
let $TagName := "Chapter Title"
(:removing the space between Chapter and Title:)
let $tokenizedString := fn:tokenize(($TagName), '\s')
let $concatString := fn:concat($tokenizedString[1],
$tokenizedString[2])
return
fn:QName("",$concatString() )
};
Then you need to change your xpath to use node-name
declare function oxy:getLevel($document as xs:string){
let $file := doc($document)
let $hierarchy := oxy:getHierarchyElements()
return
$file/report/body/row/*[ node-name(.) eq $hierarchy ]
};
----------------------------------------
David A. Lee
[email protected]<mailto:[email protected]>
http://www.xmlsh.org
From: [email protected] [mailto:[email protected]] On Behalf Of
Khan, Kashif
Sent: Tuesday, May 28, 2013 12:43 PM
To: [email protected]
Subject: [xquery-talk] Unable to get the value of Element
Hello Everyone, I am having a problem extracting value from an element
Here is the XML on which I am trying to run my query
Let $document := "<report>
<body>
<row>
<ChapterTitle>Front Matter</ChapterTitle>
</row
</body>
</report>"
These are the functions that I have written to extract the value of the
"ChapterTitle" Tag
declare function oxy:getHierarchyElements() {
let $TagName := "Chapter Title"
(:removing the space between Chapter and Title:)
let $tokenizedString := fn:tokenize(($TagName), '\s')
let $concatString := fn:concat($tokenizedString[1],
$tokenizedString[2])
return
element {$concatString} {''}
};
declare function oxy:getLevel($document as xs:string){
let $file := doc($document)
let $hierarchy := oxy:getHierarchyElements()
return
$file/report/body/row/$hierarchy
};
When I call oxy:getLevel($oxy:document) I get <ChapterTitle/> instead of
"Front Matter" from the XML file.
If I replace $file/report/body/row/$hierarchy with
$file/report/body/row/ChapterTitle I get the correct value.
Thanks for your help in advance
----------------
Kashif Khan
_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk