0

すべての空白を削除して、最終的なコードが 1 つのテキスト ブロックのように見えるようにします。

ここに私のヘッダーがあります

<?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" />

ほとんどの場合はうまくいくようですが、問題が発生しています。ソースを見る

問題のある領域と思われる

<!-- 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 を使用してデータを生成しています。すべての空白を削除したいだけですが、読みやすくするためにインデント パターンを保持したいと考えています。

4

2 に答える 2

1

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> 
于 2010-12-23T20:03:27.490 に答える
1

問題のある領域と思われる

<!-- 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>命令を使用して、既存の空白文字を削除し、どのテキストを正確に出力するかを明示的に指定します。

于 2010-12-23T20:03:49.540 に答える