首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为出现在XML文档中不同级别的元素识别不同的xpath?

如何为出现在XML文档中不同级别的元素识别不同的xpath?
EN

Stack Overflow用户
提问于 2020-09-28 23:40:36
回答 2查看 63关注 0票数 0

例如,我想在下面的XML中找到元素的所有唯一的xpath。您可以使用xquery或任何其他方式帮助识别它吗

代码语言:javascript
复制
<a>
<b>
<identify>Level-1</identify>
</b>
<c>
    <identify>Level-2</identify>
    <d>
        <identify>Level-3</identify>
        <e>
            <identify>Level-4-1</identify>
            <identify>Level-4-2</identify>
        </e>
        <f>
            <identify>Level-4</identify>
            <g>
                <identify>Level-5</identify>        
                <identify>Level-5-2</identify>          
            </g>
        </f
    </d>
</c>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-29 00:08:40

您的xml是无效的,但假设您修复了它,请尝试以下命令(based on this):

代码语言:javascript
复制
xquery version "3.1";

declare namespace functx = "http://www.functx.com";
declare function functx:path-to-node
  ( $nodes as node()* )  as xs:string* {

$nodes/string-join(ancestor-or-self::*/name(.), '/')
 } ;

let $in-xml := 
<a>
   <b>
      <identify>Level-1</identify>
   </b>
   <c>
      <identify>Level-2</identify>
      <d>
         <identify>Level-3</identify>
         <e>
            <identify>Level-4-1</identify>
            <identify>Level-4-2</identify>
         </e>
         <f>
            <identify>Level-4</identify>
            <g>
               <identify>Level-5</identify>
               <identify>Level-5-2</identify>
            </g>
         </f>
      </d>
   </c>
</a>

return
functx:path-to-node($in-xml//*[name()="identify"])

输出:

代码语言:javascript
复制
"a/b/identify"    
"a/c/identify"    
"a/c/d/identify"   
"a/c/d/e/identify"    
"a/c/d/e/identify"    
"a/c/d/f/identify"    
"a/c/d/f/g/identify"    
"a/c/d/f/g/identify"
票数 1
EN

Stack Overflow用户

发布于 2020-09-29 02:00:29

还有一个path函数://identify/path()会给出

代码语言:javascript
复制
/Q{}a[1]/Q{}b[1]/Q{}identify[1]
/Q{}a[1]/Q{}c[1]/Q{}identify[1]
/Q{}a[1]/Q{}c[1]/Q{}d[1]/Q{}identify[1]
/Q{}a[1]/Q{}c[1]/Q{}d[1]/Q{}e[1]/Q{}identify[1]
/Q{}a[1]/Q{}c[1]/Q{}d[1]/Q{}e[1]/Q{}identify[2]
/Q{}a[1]/Q{}c[1]/Q{}d[1]/Q{}f[1]/Q{}identify[1]
/Q{}a[1]/Q{}c[1]/Q{}d[1]/Q{}f[1]/Q{}g[1]/Q{}identify[1]
/Q{}a[1]/Q{}c[1]/Q{}d[1]/Q{}f[1]/Q{}g[1]/Q{}identify[2]

对于Jack答案中的示例:https://xqueryfiddle.liberty-development.net/nc4P6ya

这种格式对于没有名称空间的XML来说很难看,但在其他情况下,它具有冗长但有效的格式,无需设置从前缀到URI的任何名称空间绑定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64105348

复制
相关文章

相似问题

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