Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > XPath вернуть имя повторяющегося узла


Автор: motoden 30.1.2013, 00:00
Доброго времени суток, уважаемые товарищи!
Помогите пожалуйста написать XPath-запрос который бы мог мне вернуть имена повторяющихся друг за другом узлов в документе XML.
Например, в этом примере (взятом мной из википедии http://ru.wikipedia.org/wiki/Xpath):
Код

<html>
 <body>
    <div>Первый слой
      <span>блок текста в первом слое</span>
    </div>
    <div>Второй слой</div>
    <div>Третий слой
      <span class="text">первый блок в третьем слое</span>
      <span class="text">второй блок в третьем слое</span>
      <span>третий блок в третьем слое</span>
    </div>
    <img />
  </body>
</html>

мне нужно чтобы XPath-запрос возвращал тэг span и тэг div. Только эти тэги повторяются в документе друг за другом.
Я, правда, не совсем уверен возможно ли это. Возможо?

Добавлено через 1 минуту и 31 секунду
Вот такая строка:
Код

//*[name(.) = name(following-sibling::*)]

Возвращает также и всё содержимое во всех найденных повторяющихся друг за другом узлах. А как можно было бы без содержимого?

Автор: diadiavova 30.1.2013, 09:10
Цитата(motoden @  30.1.2013,  01:00 Найти цитируемый пост)
А как можно было бы без содержимого?

Никак. Просто этот язык не знает такого типа данных, как коллекция строк. Данная конструкция возвращает набор узлов, а их имена уже можно извлечь при обработке этого набора, передавая узлы функции name().

Автор: motoden 30.1.2013, 12:41
Цитата

а их имена уже можно извлечь при обработке этого набора, передавая узлы функции name(). 


Вы не могли бы показать запрос?

Автор: diadiavova 30.1.2013, 13:03
Какой именно? Если надо вывести в документ список имён, то обработку можно выполнить тем же фор-ич и там уже обрабатывать. Ну, например, вот такая конструкция 
Код

<xsl:for-each select="/*[name(.) = name(following-sibling::*)]">
    <xsl:value-of select="name(.)"/>;
</xsl:for-each>
выведет список имён элементов, возвращаемых указанным выражением, разделённых точкой с запятой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)