【发布时间】:2013-06-07 23:14:30
【问题描述】:
我正在尝试学习 XPath,但在进行嵌套搜索(使用包含)时遇到了问题。
具体来说,我得到了以下问题:
根据以下dtd,有一个作者列表和一个书籍列表:
<!ELEMENT db1 (book*, author*)>
<!ELEMENT book (title)>
<!ATTLIST book
bid ID #REQUIRED
authors IDREFS #REQUIRED
>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ATTLIST author
aid ID #REQUIRED
>
编写一个 XPath 表达式,返回写书的作者数量。可以假设没有两个作者 ID 相互包含。
我尝试了很多东西,但我不断收到“包含的项目太多”的错误消息。 我正在尝试运行这样的东西:
//author/@aid[contains(//book/@authors/string(.), string(.))]
我以下面的xml文件为例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE db1 SYSTEM "C:\blabla\db1.dtd">
<db1>
<book authors="a1 a3 a4" bid="b1">
<title>Book 1</title>
</book>
<book authors="a1 a2 a3" bid="b2">
<title>Book 2</title>
</book>
<book authors="a4" bid="b3">
<title>Book 3</title>
</book>
<author aid="a1"></author>
<author aid="a91"></author>
<author aid="a2"></author>
<author aid="a88"></author>
<author aid="a3"></author>
<author aid="a4"></author>
<author aid="a5"></author>
<author aid="a6"></author>
</db1>
预期的答案应该是
a1 a2 a3 a4
有什么建议吗?
谢谢。
【问题讨论】:
-
能否提供您正在运行以测试 XPath 表达式的 XML 文档和代码?
-
@AJ,我添加了我正在使用的示例。希望对您有所帮助....
-
解释预期的答案?您想从bid=1 返回@authors 吗?或者您想返回一个唯一的作者列表和相应的书籍?
-
最初的问题是指定有多少不同的作者,以便这些作者写任何书。我稍微更改了示例以使其不那么混乱。一种方法是计算这些作者,然后对结果进行计数。这就是我在这里尝试做的。