Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 查找节点的唯一本地名称(以及唯一节点结构)_Xml_Xpath_Xquery_Basex - Fatal编程技术网

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

Xml 查找节点的唯一本地名称(以及唯一节点结构),xml,xpath,xquery,basex,Xml,Xpath,Xquery,Basex,我试图动态地感知xml文件的结构,以确定存在的唯一节点 i、 如果我有 <?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

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

i、 如果我有

<?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>
我知道如何找到不同的节点值,但我需要的是找到不同的节点本地名称(我不知道有什么命令)

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

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



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

这就像
不同的值(/*/*/*/*/local-name())一样容易。
这和
不同的值一样容易(/*/*/*/local-name())

不同的值(/*/*/*/local-name())
一样简单,与
不同的值(/*/*/*/local-name())

一样简单,使用string-join()也可以进行格式化,
字符串连接(不同的值(*/*/*/*/local-name()),“&&xa;”)
所以我不敢相信我忘记了可以在路径中使用本地名称,而不是作为函数。我遇到的问题是,当我尝试调用:distinct values(//*:bookstore/*:bookList/local-name()[*:stock=1])时,我收到一个错误,说“node expected as input,xs:string found”我希望您使用这个:
distinct values(//*:bookstore/*:bookList/*[*:stock=1]/local-name())
。好像你看到,
local-name()/*
没有意义(一个字符串有一个子元素??)。最后,这就是我做错的!非常感谢@Lingamurthy CS。非常感谢你的帮助和耐心。@DavidK,只是为了确定一下,你说过“我忘了您可以在路径中使用本地名称,而不是作为函数使用”,但这不是正确的解释,表达式
/*/*/*/local-name()
具有对
local-name()的函数调用
函数在路径表达式的最后一步中,这是XPath 2.0及更高版本和任何XQuery版本中的一项功能。请参见其中的内容:“由于路径中的每个步骤都为下一步提供上下文节点,因此实际上,只允许路径中的最后一步返回原子值序列。”。以及使用string-join()也会进行格式化,
string join(distinct values(*/*/*/local-name()),“
;”
,所以我不敢相信我忘了可以在路径中使用本地名称而不是函数。我遇到的问题是,当我尝试调用时:distinct values(/*:bookstore/*:bookList/local-name()[*:stock=1]))我收到一个错误,提示“节点应作为输入,xs:string found”我希望您使用以下命令:
不同的值(//*:bookstore/*:bookList/*[*:stock=1]/local-name())
。好像您看到,
local-name()/*
没有意义(字符串有子元素??)。最后,这就是我做错的地方!非常感谢@Lingamurthy CS。非常感谢您的帮助和耐心。@DavidK,为了确保这一点,您说过“我忘了您可以在路径中使用本地名称而不是作为函数”,但这不是正确的解释,表达式
/*/*/*/local-name()
在路径表达式的最后一步中有一个对
local-name()函数的函数调用,这是XPath 2.0和更高版本以及任何XQuery版本中的一个功能。请参见其中的内容“由于路径中的每一步都为下一步提供上下文节点,因此实际上,只允许路径中的最后一步返回原子值序列。“。使用string-join()也可以进行格式化,
string-join(distinct values(*/*/*/*/local-name()),“
;”
所以我不敢相信我忘记了可以在路径中使用本地名称,而不是作为函数。我遇到的问题是,当我尝试调用:distinct values(//*:bookstore/*:bookList/local-name()[*:stock=1])时,我收到一个错误,说“node expected as input,xs:string found”我希望您使用这个:
distinct values(//*:bookstore/*:bookList/*[*:stock=1]/local-name())
。好像你看到,
local-name()/*
没有意义(一个字符串有一个子元素??)。最后,这就是我做错的!非常感谢@Lingamurthy CS。非常感谢你的帮助和耐心。@DavidK,只是为了确定一下,你说了”我忘了您可以在路径中使用本地名称,而不是作为函数“但这不是正确的解释,表达式
/*/*/*/local-name()
在路径表达式的最后一步中有一个对
local-name()
函数的函数调用,这是XPath 2.0及更高版本和任何XQuery版本中的一个功能。请参见其中的说明”由于路径中的每一步都为下一步提供上下文节点,因此实际上,只允许路径中的最后一步返回原子值序列。“。使用string-join()也可以进行格式化,
string-join(distinct values(*/*/*/*/local-name()),“
;”
所以我不敢相信我忘记了可以在路径中使用本地名称,而不是作为函数。我遇到的问题是,当我尝试调用:distinct values(//*:bookstore/*:bookList/local-name()[*:stock=1])时,我收到一个错误,说“node expected as input,xs:string found”我希望您使用这个:
distinct values(//*:bookstore/*:bookList/*[*:stock=1]/local-name())
。就像你看到的那样,
local-name()/*
没有意义(一个字符串有一个子元素???。最后,这就是我做错的地方!非常感谢
book
cd
tape