如果是Xquery中的梯子

时间:2014-05-05 16:17:40

标签: xquery

我有一个xml文件:

<search>
    <parameter name=”Title” included=”true”>I Want to Be Somebody New!</parameter>
    <parameter name=”Author” included=”true”>Lopsh</parameter>
    <parameter name=”ISBN” included=”false”/>
</search>

我想要做的是,如果包含为true且名称为Title,则获取标题数据。如果有阶梯,我到处搜索其他地方,但似乎找不到。我试过这段代码

let $params := doc('params.xml')

for $param in $params
    let $title := if ($param/@name="Title" and $param/@included="true") then $param/data(.) else ' '
    let $author := if ($param/@name="Author" and $param//@included="true") then $param/data(.) else ' '
    let $isbn := if ($param/@name="ISBN" and $param//@included="true") then $param/data(.) else ' '

return $title

它仍无法正常工作

2 个答案:

答案 0 :(得分:1)

您没有迭代<parameter>个元素。 doc(...)返回一个文档节点,其第一个子节点是根元素,在本例中为<search>。要迭代所需的值,请添加XPath以选择它们:

for $param in $params/search/parameter

答案 1 :(得分:1)

对于您要求的内容&#34;包含为true且名称为Title获取标题数据&#34;,您可以使用非常简单的XPath:

data(/search/parameter[@included eq "true"][@name eq "Title"])

但也许你的问题不易被理解,因为你对代码的尝试似乎要复杂得多?!?