[MarkLogic Dev General] Unable to get the value of Element Š.

Khan, Kashif Kashif.Khan at hmhco.com
Tue May 28 11:35:26 PDT 2013


I meant to say I should not have posted this question on this forum.

————————————————
Kashif Khan, PMI-ACP
Sr. Solution Architect
Publishing Technology

Houghton Mifflin Harcourt
9400 South Park Center Loop
Orlando, FL 32819
Office: 407.345.3420
Mobile: 407.949.4697
hmhco.com

From: <Khan>, Kashif Khan <kashif.khan at hmhco.com<mailto:kashif.khan at hmhco.com>>
Reply-To: MarkLogic Developer Discussion <general at developer.marklogic.com<mailto:general at developer.marklogic.com>>
Date: Tuesday, May 28, 2013 2:32 PM
To: MarkLogic Developer Discussion <general at developer.marklogic.com<mailto:general at developer.marklogic.com>>
Subject: Re: [MarkLogic Dev General] Unable to get the value of Element Š.

Thanks but here is the answer to my question. First off I should have posted this question here as this is a pure xQuery question.

This answer was provided by David Lee on talk at x-query.com<mailto:talk at x-query.com>. This solution work for me.

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 ]
};

————————————————
Kashif Khan, PMI-ACP
Sr. Solution Architect
Publishing Technology

Houghton Mifflin Harcourt
9400 South Park Center Loop
Orlando, FL 32819
Office: 407.345.3420
Mobile: 407.949.4697
hmhco.com

From: Damon Feldman <Damon.Feldman at marklogic.com<mailto:Damon.Feldman at marklogic.com>>
Reply-To: MarkLogic Developer Discussion <general at developer.marklogic.com<mailto:general at developer.marklogic.com>>
Date: Tuesday, May 28, 2013 2:27 PM
To: MarkLogic Developer Discussion <general at developer.marklogic.com<mailto:general at developer.marklogic.com>>
Subject: Re: [MarkLogic Dev General] Unable to get the value of Element Š.


Kashif,

You need to get XML into the system to use XQuery – XQuery does not work on strings that happen to have XML in them, but on XML documents. MarkLogic adds “unquote,” “document-insert” etc. because there is now method in the XQuery spec to add XML.

You must use implementation-specific methods to get the XML into the system in the first place because XQuery as a spec does not define add/insert functions.

Yours,
Damon

From:general-bounces at developer.marklogic.com<mailto:general-bounces at developer.marklogic.com> [mailto:general-bounces at developer.marklogic.com] On Behalf Of Khan, Kashif
Sent: Friday, May 24, 2013 6:39 PM
To: MarkLogic Developer Discussion
Cc: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Unable to get the value of Element Š.

Yes I looked into that but the problem is that I can not use any MarkLogic functions.
Best Regards,
Kashif Khan

Sent from my iPhone

On May 24, 2013, at 6:36 PM, "Danny Sokolsky" <Danny.Sokolsky at marklogic.com<mailto:Danny.Sokolsky at marklogic.com>> wrote:
Hi Kashif,

In that case, you can use xdmp:unquote, which parses a string as XML.  Something like:

let $document :=
"<report>
        <body>
        <row>
            <ChapterTitle>Front Matter</ChapterTitle>
</row>
</body>
</report>"
let $document2 := xdmp:unquote($document)
return $document2//ChapterTitle

From:general-bounces at developer.marklogic.com<mailto:general-bounces at developer.marklogic.com> [mailto:general-bounces at developer.marklogic.com] On Behalf Of Khan, Kashif
Sent: Friday, May 24, 2013 3:31 PM
To: MarkLogic Developer Discussion
Cc: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] Unable to get the value of Element Š.

Danny I am trying to resolve a problem where I have to convert text string into the tag name and then use that to extract the value from the XML.
Best Regards,
Kashif Khan

Sent from my iPhone

On May 24, 2013, at 5:47 PM, "Danny Sokolsky" <Danny.Sokolsky at marklogic.com<mailto:Danny.Sokolsky at marklogic.com>> wrote:
Hi Kashif,

Why not treat your XML as XML instead of a string.  Then you can just use XPath.  Something like:

let $document :=
<report>
        <body>
        <row>
            <ChapterTitle>Front Matter</ChapterTitle>
</row>
</body>
</report>
return $document//ChapterTitle
=>
<ChapterTitle>Front Matter</ChapterTitle>

-Danny

From:general-bounces at developer.marklogic.com<mailto:general-bounces at developer.marklogic.com> [mailto:general-bounces at developer.marklogic.com] On Behalf Of Khan, Kashif
Sent: Friday, May 24, 2013 2:38 PM
To: MarkLogic Developer Discussion
Subject: [MarkLogic Dev General] 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 functionoxy: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
_______________________________________________
General mailing list
General at developer.marklogic.com<mailto:General at developer.marklogic.com>
http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________
General mailing list
General at developer.marklogic.com<mailto:General at developer.marklogic.com>
http://developer.marklogic.com/mailman/listinfo/general
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://developer.marklogic.com/pipermail/general/attachments/20130528/382a6f88/attachment-0001.html 


More information about the General mailing list