Как включить разрыв строки в выражение XPath?

Есть ли способ добавить разрыв строки в выражение XPath?

Вот мое текущее выражение, которое не работает

{concat(@Parameter1, $NullObj, @Parameter2)}

Где переменная $NullObj равна 
 шестнадцатеричному значению символа LINEFEED.

Это выводится как «Параметр1 Параметр2».

РЕДАКТИРОВАТЬ: К сожалению, я использую Xpath/Xsl 1.0.

РЕДАКТИРОВАТЬ: пример кода ниже. XML:

<Post>
  <Title>Title Text</Title>
  <Body>Body Text </Body>
  <Author>Author Name</Author>
</Post>

Образец XSL

<xsl:Variable name="NullObj">
<xsl:value-of select="'&#xa;'" />
</xsl:variable>

Edit2: полный контекст Xpath по запросу:

<xsl:value-of select="concat("The title is", @Title, $NullObj, "The Body reads:", @Body, $NullObj, "The Author is", @Author)" />

Результирующий вывод не включает разрывы строк. Я упускаю что-то фундаментальное? Я также пытался заменить &#xa; на &#10;, но безуспешно. Спасибо за терпеливость.


person Rob Ot    schedule 04.05.2016    source источник
comment
Опубликуйте воспроизводимый пример.   -  person michael.hor257k    schedule 04.05.2016
comment
спасибо @kjhughes. Я попытался использовать это решение, и оно не сработало. Возможно, это связано с тем, что версия XPath + XSL, которую я использую, не 2.0. Я должен был уточнить это в своем исходном сообщении.   -  person Rob Ot    schedule 04.05.2016
comment
@ michael.hor257k, добавил. Заранее благодарим за любую помощь, которую вы можете предоставить.   -  person Rob Ot    schedule 04.05.2016
comment
@ michael.hor257k Извините за это. Я добавил полный тег.   -  person Rob Ot    schedule 04.05.2016
comment
Я не думаю, что вы понимаете, что означает полное. Это означает, что я должен иметь возможность копировать/вставлять ваш код и запускать его как есть без необходимости что-либо добавлять. -- Кроме того, код не имеет смысла: Title, Body и Author не являются атрибутами. -- Обратите также внимание на то, что XML чувствителен к регистру: <xsl:Variable name="NullObj"> приведет к ошибке. -- А ваше выражение некорректно из-за вложенных кавычек.   -  person michael.hor257k    schedule 04.05.2016
comment
Может быть, вы используете MAC? Чем новая строка &#xd;   -  person hr_117    schedule 04.05.2016


Ответы (2)


Чтобы продемонстрировать, что подразумевается под минимальным, полным и проверяемым примером:

Следующая таблица стилей:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:variable name="NullObj">
    <xsl:value-of select="'&#xa;'" />
</xsl:variable>

<xsl:template match="/Post">
    <xsl:copy>
        <xsl:value-of select="concat('The title is: ', Title, $NullObj, 'The Body reads:', Body, $NullObj, 'The Author is: ', Author)" />
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

применяется к вашему примеру ввода, возвращает:

<?xml version="1.0" encoding="UTF-8"?>
<Post>The title is: Title Text
The Body reads:Body Text 
The Author is: Author Name</Post>

Как видите, разрывы строк находятся там, где вы ожидаете их увидеть.


Редактировать:

Судя по всему, вы пытаетесь создать HTML-вывод, поэтому правильный ответ будет таким:

<xsl:value-of select="concat('The title is: ', Title)" />
<br/>
<xsl:value-of select="concat('The Body reads:', Body)" />
<br/>
<xsl:value-of select="concat('The Author is: ', Author)" />
person michael.hor257k    schedule 04.05.2016

Решил это. Проблема оказалась в пробелах. По-видимому, установка для него значения, отличного от «pre», будет игнорировать разрывы строк Xpath в IE.

person Rob Ot    schedule 05.05.2016
comment
Хорошо, если вы создаете HTML для просмотра в веб-браузере - и как мы должны узнать об этом из фрагментов, которые вы разместили?!! - тогда вы действительно должны создавать HTML разрывы строк, например <br>. developer.mozilla.org/en/docs/Web/HTML/Element/ br Тогда вам не нужно будет прибегать к использованию тега <pre>, который вызывает ряд других эффектов, которые вам, вероятно, не нужны (например, моноширинный шрифт). - person michael.hor257k; 05.05.2016