Удалить пробелы из XSL - PullRequest
       14

Удалить пробелы из XSL

0 голосов
/ 23 декабря 2010

Я хочу удалить все пробелы, чтобы мой окончательный код выглядел как отдельный блок текста.

Вот мой заголовок

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

<xsl:output method="xml"
doctype-public="-W3CDTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
omit-xml-declaration="yes"
encoding="UTF-8"
indent="no" />

, который, кажется, работает большую часть времени, но явозникли проблемы.См. source

Проблемная область, кажется,

<!-- clinical research coordinator -->
<xsl:template match="clinical-research-coordinators">

<xsl:variable name="id" select="item/@id" />
<xsl:variable name="entry" select="//people/entry[@id=$id]" />

<xsl:value-of select="$entry/display-name" />, 

clinical research coordinator, at 

<xsl:element name="a">

    <xsl:attribute name="href">mailto:<xsl:value-of select="$entry/email" /></xsl:attribute>
    <xsl:attribute name="class">email</xsl:attribute>

    <xsl:value-of select="$entry/email" />

</xsl:element>

or 

<xsl:value-of select="$entry/phone" />  

</xsl:template>

Я использую Symphony CSM для генерации данных.Я просто хочу удалить все пробелы, но хочу сохранить шаблоны отступов для удобства чтения.

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Проблемная область, кажется,

<!-- clinical research coordinator -->
<xsl:template match="clinical-research-coordinators">
    <xsl:variable name="id" select="item/@id" />
    <xsl:variable name="entry" select="//people/entry[@id=$id]" />
    <xsl:value-of select="$entry/display-name" />,   clinical research coordinator, at   
    <xsl:element name="a">
        <xsl:attribute name="href">mailto:
            <xsl:value-of select="$entry/email" />
        </xsl:attribute>
        <xsl:attribute name="class">email</xsl:attribute>
        <xsl:value-of select="$entry/email" />
    </xsl:element>
      or   
    <xsl:value-of select="$entry/phone" />
</xsl:template>

Решение :

<!-- clinical research coordinator -->
<xsl:template match="clinical-research-coordinators">
    <xsl:variable name="id" select="item/@id" />
    <xsl:variable name="entry" select="//people/entry[@id=$id]" />
    <xsl:value-of select="$entry/display-name" />,   clinical research coordinator, at <xsl:text/>  
    <xsl:element name="a">
        <xsl:attribute name="href">mailto:
            <xsl:value-of select="$entry/email" />
        </xsl:attribute>
        <xsl:attribute name="class">email</xsl:attribute>
        <xsl:value-of select="$entry/email" />
    </xsl:element>
      <xsl:text> or </xsl:text>   
    <xsl:value-of select="$entry/phone" />
</xsl:template>

Заметка : Использование инструкции <xsl:text> для устранения существующих пробельных символов и явного указания того, какой именно текст должен выводиться.

1 голос
/ 23 декабря 2010

С http://www.w3.org/TR/xslt#strip

После дерева для исходного документа или документ таблицы стилей был построено, но до этого иначе обрабатывается XSLT, некоторый текст узлы зачищены. Текстовый узел никогда не удаляется, если только он не содержит пробельные символы.

Это

",

clinical research coordinator, at

"

и

"
or

"

не являются пустыми текстовыми узлами, поэтому они не должны быть выделены из таблицы стилей.

Вот почему инструкция xsl:text предназначена для. Использование:

<xsl:text>, clinical research coordinator, at </xsl:text> 

и

<xsl:text> or </xsl:text> 
...