【问题标题】:Double append in XqueryXquery 中的双重追加
【发布时间】:2010-08-27 12:50:53
【问题描述】:

我想附加一些 XML 标记的值,然后再次附加结果。但是我在附加结果时遇到了一些麻烦,所以我只有一个附加的最终结果。

想象一下你有这个:

<nodeA>
<nodeB>
 <item>1</item>
 <item>2</item>
 <yesno>blah</yesno>
</nodeB>
<nodeC>
 <thing>A</thing>
</nodeC>
</nodeA>

<nodeA>
<nodeB>
 <item>3</item>
 <item>4</item>
 <yesno>blah</yesno>
</nodeB>
<nodeC>
 <thing>B</thing>
</nodeC>
</nodeA>

我想得到这个结果&lt;result&gt;A,1,2,B,3,4&lt;/result&gt; 但我得到了这个:&lt;result&gt;A,1,2&lt;/result&gt;&lt;result&gt;B,3,4&lt;/result&gt;

我一直在读这个:XQuery: how to properly append , in for loop 但我仍然无法让它工作。这是我的代码示例。

let $contador := count(
    for $x in $productDoc//*[substring(local-name(.),2,23)="nodeB"]
    where not(exists ($x/ns0:yesno))
    return
     $x)

 return
    if ($contador = 0) then
      <result> </result>
    else
      for $x in $productDoc//*[substring(local-name(.),2,18)="nodeB"]
      where not(exists ($x//ns0:yesno))
      return
          for $y in $x//*[matches(name(.),'thing')]
          let $z := $x//*[matches(name(.),'item')]
          return
            for $i in $y
            let $c := concat($i,",",string-join($z,","))
            return          
                let $d := string-join($c,",")
                <result>{ $d }</result>

我想正在发生的事情是我错误地附加了部分结果......或者在错误的地方,但我不知道在哪里做。也许我应该从另一个对结果进行字符串连接的函数调用这个函数。你怎么看?

【问题讨论】:

  • 最好给出一个XML的例子和你想要得到的结果。仅查看代码就很难理解您想要什么。
  • 我认为示例的代码是可见的,我对其进行了编辑以更正它。

标签: xml join append xquery


【解决方案1】:

以下查询准确返回您需要的内容(在您提供的示例上运行):

<result>{
string-join(
  for $nodeA in $productDoc//nodeA
  return ($nodeA//thing, $nodeA//item), ",")
}</result>

如果您需要更具体的内容,请在您的问题中指定更多详细信息。

【讨论】:

  • 非常感谢。我将您的查询添加到我的实际 XML 文件中并且可以正常工作。我想我让事情变得比以前更复杂了。
猜你喜欢
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2021-12-13
  • 2014-10-27
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多