查找节点的唯一本地名称(以及唯一的节点结构)

时间:2015-04-07 12:58:39

标签: xml xpath xquery basex

我试图动态感知xml文件的结构以确定存在的唯一节点

即。如果我有

<?xml version="1.0" encoding="UTF-8"?>
<nsX:bookstore xmlns:nsX="http://namespace1" xmlns:nsY="http://namespace2">
  <nsX:bookList>
    <nsX:book category="COOKING">
      <nsX:title lang="en">Everyday Italian</nsX:title>
      <nsY:stock>1</nsY:stock>
    </nsX:book>
    <nsX:book category="CHILDREN">
      <nsX:title lang="en">Harry Potter</nsX:title>
      <nsX:edition lang="en">2</nsX:edition>
      <nsY:stock>0</nsY:stock>
    </nsX:book>
    <nsX:cd category="WEB">
      <nsX:albumTitle lang="en">XQuery Kick Start</nsX:albumTitle >
      <nsY:stock>1</nsY:stock>
    </nsX:cd>
    <nsX:tape category="WEB">
      <nsX:title lang="en">Learning XML</nsX:title>
      <nsY:year>1992</nsY:year>
    </nsX:tape>
  </nsX:bookList>
</nsX:bookstore>

并希望生成我唯一类型的对象列表

book
cd
tape

我知道如何找到节点的不同值,但我需要的是找到节点的不同本地名称(我不知道命令)。

我可以使用循环来返回每个项目的本地名称,但是它会分别返回每个本地名称,这使我无法使用distinct-values函数。

我可以使用编程逻辑来处理我的xQuery的结果,但我更愿意只返回正确的信息。任何建议都将不胜感激。

最终,我希望能够确定子节点的独特结构,以便我可以看到我有2种不同类型的书籍(一种带有标题,另一种带有附加)以及CD和一盘录音带。很容易检查这些东西是否存在,但如果我不知道我在寻找什么,并且我想根据它们的节点结构识别出独特的对象类型,我需要知道如何找到那个。

1 个答案:

答案 0 :(得分:2)

就像distinct-values(/*/*/*/local-name())一样简单。