首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XQuery格式化输出

XQuery格式化输出
EN

Stack Overflow用户
提问于 2014-04-17 01:03:09
回答 3查看 527关注 0票数 0

我正在尝试格式化输出

我有一个xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?> 
<personnel> 
    <person id="Big.Boss"> 
        <name> 
            <family>Boss</family> 
            <given>Big</given> 
        </name> 
        <email>chief@oxygenxml.com</email> 
        <link subordinates="one.worker two.worker three.worker four.worker 
            five.worker"/> 
    </person> 
    <person id="one.worker"> 
        <name> 
            <family>Worker</family> 
            <given>One</given> 
        </name> 
        <email>one@oxygenxml.com</email> 
        <link manager="Big.Boss"/> 
    </person> 
    <person id="two.worker"> 
        <name> 
            <family>Worker</family> 
            <given>Two</given> 
        </name> 
        <email>two@oxygenxml.com</email> 
        <link manager="Big.Boss"/> 
    </person> 
    <person id="three.worker"> 
        <name> 
            <family>Worker</family> 
            <given>Three</given> 
        </name> 
        <email>three@oxygenxml.com</email> 
        <link manager="Big.Boss"/> 
    </person> 
    <person id="four.worker"> 
        <name> 
            <family>Worker</family> 
            <given>Four</given> 
        </name> 
        <email>four@oxygenxml.com</email> 
        <link manager="Big.Boss"/> 
    </person> 
    <person id="five.worker"> 
        <name> 
            <family>Worker</family> 
            <given>Five</given> 
        </name> 
        <email>five@oxygenxml.com</email> 
        <link manager="Big.Boss"/> 
    </person> 
</personnel> 

这是XQuery

代码语言:javascript
复制
for $b in doc("Persons.xml")/personnel/person/name
where $b/family = "Boss"
return
 <persons>
 <found>  { $b/family, $b/given}</found> 
</persons>

我得到了这个输出

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<persons>
   <found>
      <family>Boss</family>
      <given>Big</given>
   </found>
</persons>

我如何才能得到这个由空格分隔的输出

代码语言:javascript
复制
<persons> 
  <found>Big  Boss</found> 
</persons> 
EN

回答 3

Stack Overflow用户

发布于 2014-04-17 01:40:05

只需选择元素的字符串值,而不是元素本身:

代码语言:javascript
复制
<found>{
  $b/family/fn:string(),
  $b/given/fn:string()
}</found> 

您还可以使用union运算符|以更简洁的方式编写此代码

代码语言:javascript
复制
<found>{ $b/(family|given)/fn:string() }</found> 
票数 1
EN

Stack Overflow用户

发布于 2014-04-19 13:48:29

这些是其他可能的选项。

使用fn:data() -

代码语言:javascript
复制
<persons>
  <found>  { data($b/family), data($b/given)}</found> 
</persons>

使用fn:data() -

代码语言:javascript
复制
<persons>
  <found>  { data($b/family), data($b/given)}</found> 
</persons>

使用fn:string-join() -

代码语言:javascript
复制
<persons>
  <found>  { string-join(($b/family, $b/given), " ")}</found> 
</persons>
票数 0
EN

Stack Overflow用户

发布于 2014-05-02 19:41:26

代码语言:javascript
复制
$b/family

正如您所注意到的,这将返回节点<family>Boss</family>,其中包含所有子节点。在本例中,唯一的子对象是您想要的(#PCDATA)。

要返回节点内的文本(#PCDATA),请使用text()

代码语言:javascript
复制
$b/family/text()

您的返回值应该是:

代码语言:javascript
复制
<persons>
  <found>
    {
      $b/family/text(),
      " ",
      $b/given/text()
    }
  </found>
</persons>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23115768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档