Учитывая эту структуру:XSLT2 - тест, который узел приходит первым среди вариантов
<body>
<h1>Main Title</h1>
<p class="sectiontitle>Title</p>
<p class="bodytext">some text</bodytext>
<ul>...</ul>
<p class="paragraphtitle>Subtitle</p>
<p class="bodytext">some text</bodytext>
</body>
или это один, где paragraphtitle и sectiontitle перепутаны:
<h1>Main Title</h1>
<p class="paragraphtitle>Title</p>
<p class="bodytext">some text</bodytext>
<ul>...</ul>
<p class="sectiontitle>Subtitle</p>
<p class="bodytext">some text</bodytext>
</body>
Я преобразуя этот XML-структуры в другую аромат XML (DITA), и для этого мне нужно знать, какой узел на первом месте, потому что это говорит мне, как обрабатывать остальную часть файла.
Нет другого способа обработать файл, пока я не узнаю, что было первым.
Я знаю, что перед любым из этих заголовков будет элемент h1, h2, h3 .... Там может быть <p class=bodytext>
элементов в любом месте между основным заголовком и тегом закрывающего тела. Это очень случайно.
Как я могу узнать, что на первом месте: sectiontitle p или paragraphtitle p.
Я попытался с некоторыми сумасшедшими выражения ставят в выбор, как:
body/p[@class='sectiontitle'][1]/preceding-sibling::p[@class!='paragraphtitle'][last()]/preceding-sibling::*[not(self::p[@class='sectiontitle' or @class='paragraphtitle']) and preceding-sibling::h1]
или
body/p[@class='paragraphtitle'][1]/preceding-sibling::p[@class!='sectiontitle'][last()]/preceding-sibling::*[not(self::p[@class='sectiontitle' or @class='paragraphtitle']) and preceding-sibling::h1]
Это работает в большинстве случаев (по-прежнему нужно настроить что-то), но я чувствую, должно быть чем-то проще рассказать, какой узел входит первым в список возможностей.
Есть ли способ получить абсолютную позицию? Что-то вроде
if absposition(paragraphtitle[1]) < absposition(sectiontitle[1]) then
Почему вы должны знать, что первично? Какую ** настоящую ** проблему вы пытаетесь решить здесь? –
Я пытаюсь определить файл, чтобы знать, как его обрабатывать, я знаю 2 формы: sectiontitle first, of paragraphtitle first, основываясь на этом, я использую другой путь для каждого. – Flag