首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回外部定义的所有节点的Xquery不仅仅是[1]

返回外部定义的所有节点的Xquery不仅仅是[1]
EN

Stack Overflow用户
提问于 2015-09-02 04:34:11
回答 1查看 64关注 0票数 1

我有一些XML

代码语言:javascript
复制
<doc:document xmlns:doc="http://www.elsevier.com/xml/document/schema" xmlns:dp="http://www.elsevier.com/xml/common/doc-properties/schema" xmlns:cps="http://www.elsevier.com/xml/common/consyn-properties/schema" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dct="http://purl.org/dc/terms/" xmlns:prism="http://prismstandard.org/namespaces/basic/2.0/" xmlns:oa="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/" xmlns:cp="http://vtw.elsevier.com/data/ns/properties/Copyright-1/" xmlns:cja="http://www.elsevier.com/xml/cja/schema" xmlns:ja="http://www.elsevier.com/xml/ja/schema" xmlns:bk="http://www.elsevier.com/xml/bk/schema" xmlns:ce="http://www.elsevier.com/xml/common/schema" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:cals="http://www.elsevier.com/xml/common/cals/schema" xmlns:tb="http://www.elsevier.com/xml/common/table/schema" xmlns:sa="http://www.elsevier.com/xml/common/struct-aff/schema" xmlns:sb="http://www.elsevier.com/xml/common/struct-bib/schema" xmlns:xlink="http://www.w3.org/1999/xlink">
  <rdf:RDF>
    <rdf:Description rdf:about="http://dx.doi.org/10.1016/j.actatropica.2015.05.007">
      <dct:format>application/xml</dct:format>
      <dct:title>Evidence and importance of genetic exchange among field populations of Trypanosoma cruzi</dct:title>
      <dct:creator>Louisa A. Messenger</dct:creator>
      <dct:creator>Michael A. Miles</dct:creator>
      <dct:subject>
        <rdf:Bag>
          <rdf:li>Chagas disease</rdf:li>
          <rdf:li>Trypanosoma cruzi</rdf:li>
          <rdf:li>Genetic exchange</rdf:li>
          <rdf:li>Recombination</rdf:li>
          <rdf:li>Cryptic sexuality</rdf:li>
          <rdf:li>Mitochondrial introgression</rdf:li>
          <rdf:li>Clonality</rdf:li>
        </rdf:Bag>
      </dct:subject>
      <dct:description>Acta Tropica, Corrected proof. doi:10.1016/j.actatropica.2015.05.007</dct:description>
      <prism:aggregationType>journal</prism:aggregationType>
      <prism:publicationName>Acta Tropica</prism:publicationName>
      <prism:copyright>Copyright &#169; 2015 The Authors Published by Elsevier B.V. All rights reserved.</prism:copyright>
      <dct:publisher>Elsevier B.V.</dct:publisher>
      <prism:issn>0001-706X</prism:issn>
      <prism:doi>10.1016/j.actatropica.2015.05.007</prism:doi>
      <prism:url>http://dx.doi.org/10.1016/j.actatropica.2015.05.007</prism:url>
      <dct:identifier>doi:10.1016/j.actatropica.2015.05.007</dct:identifier>
      <oa:openAccessInformation>
        <oa:openAccessStatus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">http://vtw.elsevier.com/data/voc/oa/OpenAccessStatus#Full</oa:openAccessStatus>
        <oa:openAccessEffective xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2015-07-14T13:32:10Z</oa:openAccessEffective>
        <oa:sponsor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <oa:sponsorName>Wellcome Trust</oa:sponsorName>
          <oa:sponsorType>http://vtw.elsevier.com/data/voc/oa/SponsorType#FundingBody</oa:sponsorType>
        </oa:sponsor>
        <oa:userLicense xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">http://creativecommons.org/licenses/by/4.0/</oa:userLicense>
      </oa:openAccessInformation>
    </rdf:Description>
  </rdf:RDF>
</doc:document>

我所要做的就是查询创建者并为每个创建者返回一行。

这会把它们交叉起来

代码语言:javascript
复制
select
    X.Filename
    ,Description.value('(*:doi/text())[1]','nvarchar(100)') doi
    ,Description.value('(*:creator/text())[1]','nvarchar(255)') creator
    ,Description.value('(*:creator/text())[2]','nvarchar(255)') creator2
from
    XMLwithOpenXML X
    OUTER APPLY XMLData.nodes('/*:document/*:RDF/*:Description')dsc(Description)

这个查询给了我一行

代码语言:javascript
复制
Filename                doi                                 creator      creator2
S0001706X15001412.xml   10.1016/j.actatropica.2015.05.007   Louisa A. Messenger Michael A. Miles

但我想做的是

代码语言:javascript
复制
select
    X.Filename
    ,Description.value('(*:doi/text())[1]','nvarchar(100)') doi
    ,Description.value('(*:creator/text())[X]','nvarchar(255)') creator
from
    XMLwithOpenXML X
    OUTER APPLY XMLData.nodes('/*:document/*:RDF/*:Description')dsc(Description)

我会给每个作者一排。

其中X的意思是获取所有创建者节点。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-02 04:43:39

您可以添加另一个APPLY来分解creator元素,以便为每个creator获得一行

代码语言:javascript
复制
select
    X.Filename
    ,Description.value('(*:doi/text())[1]','nvarchar(100)') doi
    ,creator.value('.','nvarchar(255)') creator
from XMLwithOpenXML X
    OUTER APPLY XMLData.nodes('/*:document/*:RDF/*:Description')dsc(Description)
    OUTER APPLY Description.nodes('*:creator') c(creator)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32344689

复制
相关文章

相似问题

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