Я пытаюсь изучить 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, которое возвращает количество авторов, написавших книги. Можно предположить, что нет двух идентификаторов авторов, которые содержат друг друга.
Я перепробовал много вещей, но получаю сообщение об ошибке "Слишком много предметов в контейнере".
Я пытаюсь запустить что-то вроде этого:
//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
Любой совет?
Спасибо.