Как объединить содержимое всех дочерних узлов в XPath? - PullRequest
4 голосов
/ 03 июня 2010

Возможно ли с помощью XPath получить объединенное представление всех дочерних элементов узла? Я ищу что-то вроде метода JQuery .html ().

Например, если у меня есть следующий XML:

<h3 class="title">
    <span class="content">this</span>
    <span class="content"> is</span>
    <span class="content"> some</span>
    <span class="content"> text</span>
</h3>

Я бы хотел запрос XPath на "h3 [@ class = 'title']", который бы дал мне "это какой-то текст".

Это реальный вопрос, но если больше контекста / фона полезно, вот оно: я использую XPath, и я использовал этот пост , чтобы помочь мне написать какой-то сложный XSL. Мой исходный XML выглядит следующим образом.

<h3 class="title">Title</h3>
<p>
    <span class="content">Some</span>
    <span class="content"> text</span>
    <span class="content"> for</span>
    <span class="content"> this</span>
    <span class="content"> section</span>
</p>
<p>
    <span class="content">Another</span>
    <span class="content"> paragraph</span>
</p>
<h3 class="title">
    <span class="content">Title</span>
    <span class="content"> 2</span>
    <span class="content"> is</span>
    <span class="content"> complex</span>
</h3>
<p>
    <span class="content">Here</span>
    <span class="content"> is</span>
    <span class="content"> some</span>
    <span class="content"> text</span>
</p>

Мой выходной XML учитывает каждый <h3>, а также все теги <p> до следующего <h3>. Я написал XSL следующим образом:

<xsl:template match="h3[@class='title']">
...
    <xsl:apply-templates select="following-sibling::p[
        generate-id(preceding-sibling::h3[1][@class='title'][text()=current()/text()])
        =
        generate-id(current())
    ]"/>
...
</xsl:template>

Проблема в том, что я использую метод text() для определения одинаковых h3s. В приведенном выше примере метод title (сложный заголовок 2) text () возвращает пробел. Я думал о том, чтобы использовать такой метод, как JQuery .html, который вернул бы мне «Заголовок 2 сложен».

Обновление: это может помочь уточнить. После преобразования желаемый вывод для вышеупомянутого будет выглядеть примерно так:

<section>
    <title>Title</title>
    <p>
        <content>Some</content>
        <content> text</content>
        <content> for</content>
        <content> this</content>
        <content> section</content>
    </p>
    <p>
        <content>Another</content>
        <content> paragraph</content>
    </p>
</section>
<section>
    <title>
        <content>Title</content>
        <content> 2</content>
        <content> is</content>
        <content> complex</content>
    </title>
    <p>
        <content>Here</content>
        <content> is</content>
        <content> some</content>
        <content> text</content>
    </p>
</section>

1 Ответ

5 голосов
/ 04 июня 2010
h3[@class='title']/span[@class='content']/text()

Как это?

h3[@class='title']/descendant::*/text()

Или это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...