我正在尝试使用Linux中的命令行工具学习XPath查询(我正在学习斯坦福大学的Class2Go数据库入门课程)。给定一个包含书籍和杂志的书店的名为Bookstore Q. xml的XML文件,我可以在命令行运行以下查询:
$ java -cp Saxon-HE-9.4.0.6.jar net.sf.saxon.Query -s:"BookstoreQ.xml" \
-qs:'<results>{/Bookstore/(Book|Magazine)/Title}</results>'
它将返回以下结果:
<?xml version="1.0" encoding="UTF-8"?>
<results>
<Title>A First Course in Database Systems</Title>
<Title>Database Systems: The Complete Book</Title>
<Title>Hector and Jeff's Database Hints</Title>
<Title>Jennifer's Economical Database Hints</Title>
<Title>National Geographic</Title>
<Title>National Geographic</Title>
<Title>Newsweek</Title>
<Title>Hector and Jeff's Database Hints</Title>
</results>
如果在命令行使用xmllint,我会得到相同的结果,如下所示:
$ xmllint --xpath '/Bookstore/Book/Title | /Bookstore/Magazine/Title'
但是,如果我尝试使用与Saxon示例中相同的精确XPath查询,则会出现如下错误:
$ xmllint --xpath '/Bookstore/(Book|Magazine)/Title' BookstoreQ.xml
XPath error: Invalid Expression
/Bookstore/(Book|Magazine)/Title
^
xmlXPathEval: evaluation failed
XPath evaluation failure
为什么?
感谢弗朗西斯和迈克尔帮助我理解这个问题。在linux中,在命令行上使用XPath的一种解决方法是使用类似于以下脚本的内容。
#!/bin/bash
# This script to run xpath queries
java -cp Saxon-HE-9.4.0.6.jar net.sf.saxon.Query -qs:"<results>{$1}</results>" \
\!indent=yes
echo
它假设您已经将saxon放在Java类路径的某个地方。因此,以下查询将输出上述结果(正确缩进):
$ xpath.sh "doc('BookstoreQ.xml')/Bookstore/(Book|Magazine)/Title"
xmllib2(由xmllint使用)只知道XPath 1.0,它不能在路径步骤((Book|Magazine)
部分)中使用联合运算符。
在XPath 1.0中,您必须编写(/Bookstore/Book/Title |/Bookstore/Magazine/Title)
或/Bookstore/*[name()=“Book”或name()=“Magazine”]/Title
这种限制的根本原因是XPath 1.0没有序列的概念,只有节点集。序列数据类型是为XPath 2和XQuery创建的/Bookstore/(Book | Magazine)/Title
沿着每个路径步骤传递一个序列:与文档节点的序列,然后是Bookstore子元素,然后是按文档顺序排序的图书和杂志子元素序列的并集,然后是这些子元素的Title元素。XPath 1.0的联合运算符只能将两个节点集统一为另一个节点集,因此它必须位于“最外层”表达式上下文中,而不是在路径分隔符之前或之后。
使用React,我有一个包含信息的div,其中另一个div包含项目列表。我希望第二个div(列表)可以在单击时折叠。如果我将click listener放在第一个div中,它将工作并显示项目列表。问题是它显示了所有项目的所有列表。我只希望单击项目的列表可见: 如果我在之后添加括号,我会收到以下警告: 警告:在现有状态转换期间(例如在
当我跑的时候 我在Java中得到错误。为什么?这相当于false==false,这是真的。这不是Java特有的,我在其他语言中也得到了相同的结果。这是因为短路评估吗?似乎左右双方仍会/应该进行比较。
如标题所述。我花了一些时间在一个客户的网站上实现一个特定的字体。我在所有需要的css类上实现了字体。 在定义菜单链接的“A”类中,调用字体不起作用。为什么? 参见截图1和2。 例如,在“div.powered-by”类(它也像链接一样工作)上,它可以工作,而在“a”类(它定义菜单链接)上则不行。见截图。 调用字体不起作用: Div.Powered-通过调用字体Works:
子查询如图所属,是能够查询到数据的 如果加上 where like 条件就查不出数据了
所以我有一个简单的Bell类,我正在测试垃圾收集: 如果我运行下面的代码段,它不会被垃圾回收 如果我只是检查参考资料。我住在下面,垃圾被收集了 你们能给我解释一下这是怎么回事吗?