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

Finding unique local-names of nodes (as well as unique node structure)

我正在尝试动态检测 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

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

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

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

最终,我还希望能够确定子节点的独特结构,这样我就可以看到我有 2 种不同类型的书(一种有书名,另一种有附加信息)以及CD 和磁带。检查这些东西是否存在很容易,但如果我不知道我在找什么,我想根据它们的节点结构来识别对象的独特类型,我需要知道如何找到它.

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