2016-03-02 2 views
0

Я хочу вывод с пробелами, но я хочу сохранить <xsl:strip-space elements="*"/>, а также в xslt. В настоящее время, ниже XSLT является «onetwofour», который без пробелов. Если удалить <xsl:strip-space elements="*"/> выходной тег будет, как ожидается, что это «один два четыре» (обратите внимание на два пробела между словом два & четыре один дополнительное пространство связано с subitem3)избегайте пробелов в дочернем узле

Примечание: «subitem3» тег имеет один пробел, который должен сохранить в выходе.

Есть ли способ, которым я могу хранить тег <xsl:strip-space elements="*"/> и также иметь пробелы (так что вывод должен быть следующим образом => «один два четыре»).

Если это невозможно из-за включения xsl: strip-space сверху сверху, по крайней мере, пространство для subitem3 может быть сохранено (поэтому ожидаемый результат в этом случае может быть «на четыре» места для уведомления перед словом «четыре» из-за до subitem3)

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:strip-space elements="*"/> 
<xsl:template match="item"> 
    <xsl:for-each select="child::node()"> 
        <xsl:choose> 
          <xsl:when test="name() = 'some_tag'"> 
           <!-- Do nothing for now --> 
          </xsl:when>       
          <xsl:otherwise> 
           <xsl:value-of select="descendant-or-self::text()"/> 
          </xsl:otherwise> 
         </xsl:choose> 
       </xsl:for-each> 


</xsl:template> 
</xsl:stylesheet> 

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<items> 
    <item> 
     <subitem1>one</subitem1> <subitem2>two</subitem2> <subitem3> </subitem3> <subitem4>four</subitem4> 
    </item> 
</items> 

присутствует выход: onetwofour

Ожидаемый результат: один два четыре ИЛИ OneTwo четыре

+0

Ваш вопрос непонятен: ваша таблица стилей не совпадает ни с чем в вашем входе, и вы не говорите нам, что ваш выход ** должно быть. –

+0

Пожалуйста, снова посмотрите на мой вопрос, надеемся, что это имеет смысл – user593029

ответ

1

Если вы хотите сохранить текстовый узел, который содержит только пробельные символы, то либо не использовать:

<xsl:strip-space elements="*"/> 

или заменить его по:

<xsl:preserve-space elements="subitem3"/> 

Кроме того, вы можете вставить свои собственные пространства при записи выходного дерева - например:

<xsl:template match="item"> 
    <xsl:for-each select="*"> 
     <xsl:value-of select="."/> 
     <xsl:if test="not(string())"> 
      <xsl:text> </xsl:text> 
     </xsl:if> 
    </xsl:for-each> 
</xsl:template> 
+0

, но что, если у нас есть несколько пробелов в теге, ваше решение исходит из предположения, что в subitem3 есть только одно пробел, но мне нужно общее решение, которое сохраняет количество пробелов. Но сохранить пространство работает. Спасибо за помощь. – user593029

Смежные вопросы