Я борюсь с задачей. Я пытаюсь создать функцию, которая показывает только элементы журнала, где Author1/Auth1 является одним из авторов. Я получаю перечисленные три элемента журнала, но я могу только отделить каждый журнал до новой строки. Мне не удается отделить каждый журнал-ребенок в результате (и предпочтительно с текстом рядом с значением) до новых строк (<br />)
.PHP, XML и XPath: отображать определенные узлы
У меня есть следующий документ XML:
<Journals>
<Journal>
<Title>Title1</Title>
<AuthorName>Author1</AuthorName>
<AuthorName>Author2</AuthorName>
<AuthorName>Author3</AuthorName>
<JournalName>One</JournalName>
</Journal>
<Journal>
<Title>Title2</Title>
<AuthorName>Author2</AuthorName>
<AuthorName>Author1</AuthorName>
<JournalName>Two</JournalName>
</Journal>
<Journal>
<Title>Title3</Title>
<AuthorName>Author3</AuthorName>
<JournalName>Three</JournalName>
</Journal>
<Journal>
<Title>Title4</Title>
<AuthorName>Author3</AuthorName>
<AuthorName>Author2</AuthorName>
<AuthorName>Author4</AuthorName>
<JournalName>Four</JournalName>
</Journal>
<Journal>
<Title>Title5</Title>
<AuthorName>Author2</AuthorName>
<AuthorName>Auth1</AuthorName>
<JournalName>Five</JournalName>
</Journal>
<Journal>
<Title>Title6</Title>
<AuthorName>Author2</AuthorName>
<AuthorName>Author3</AuthorName>
<JournalName>Six</JournalName>
</Journal>
</Journals>
И следующий PHP документ:
<?php
header('Content-Type: text/html; charset=utf-8');
error_reporting(E_ERROR | E_WARNING | E_PARSE);
/* FUNCTION FOR ALL ARTICLES PUBLISHED BY Author1 */
function taskOne()
{
$doc = new DOMDocument();
$doc->load("file.xml");
$xml = new DOMXPath($doc);
$query = $xml->evaluate("/Journals/Journal/AuthorName[contains(. , 'Author1') or contains(. , 'Auth1')]/..");
foreach ($query as $temp)
{
echo $temp->nodeValue . "<br />";
}
}
taskOne();
?>
Теперь другой вопрос: Каким образом, используя запрос XPath: /Journals/Journal[contains(AuthorName, 'Author1') or contains(AuthorName, 'Auth1')]
только перечисляет журнал где Author1 является главным автором, а не тем, где он является дочерним братом с номером два или три? Вот конечный результат с XPath запроса:/Journals/Journal/AuthorName[contains(. , 'Author1') or contains(. , 'Auth1')]/..
Title1 Author1 Author2 Author3 One
Title2 Author2 Author1 Two
Title5 Author2 Auth1 Five
Вот конечный результат с XPath запроса:/Journals/Journal[contains(AuthorName, 'Author1') or contains(AuthorName, 'Auth1')]
Title1 Author1 Author2 Author3 One
И clarfications, это хочу я пытаюсь достичь :
Title: Title1
Journal author: Author1
Journal author: Author2
Journal author: Author3
Journal name: One
Title: Title2
Journal author: Author2
Journal author: Author1
Journal name: Two
Title: Title5
Journal author: Author2
Journal author: Auth1
Journal name: Five
так, Что конечный результат будет выглядеть? – Ghost
@Ghost Я добавил вывод для обоих запросов. – Thomas
wait Я имею в виду в первом комментарии, что должно быть правильным окончательным результатом (желаемый результат). – Ghost