0

XSLTでは、を使用して、レンダリングされた値の前に改行を生成し、その後に別の改行を生成します。次に例を示します。

<xsl:when test="name(.) = 'Item'">
     "<xsl:value-of select="./Item/Data[last()]/text()"/>"
</xsl:when>

そして、レンダリングされた結果は次のとおりです。


                                                   "
                                             09/07/2012
"

ご覧のとおり、結果値の前後に2つの改行がありますが、目的の結果は次のとおりです。

"09/07/2012"

元の入力は次のとおりです。

元の入力があります。申し訳ありません。

                                      <Item>
                                         <Item>
                                            <Data>105</Data>
                                            <Data>09/07/2012</Data>
                                         </Item>
                                      </Item>

このXSLTをOracleServerBus内で実行しています

どんな助けでもありがたいです。

4

4 に答える 4

4

余分なスペース 選択したテキストからのものである可能性もあります。normalize-space()これを削除するために使用します。

<xsl:value-of select="normalize-space(./Item/Data[last()]/text())"/>

Edit Overnutsは<xsl:text>、引用符の前後で正しく使用されます。そうでない場合、Xsltプロセッサは、開始引用符の/終了引用符のに改行を保持します。xsl:value-ofただし、引用符とあなたの?の間に改行が入る理由はまだわかりません。

私は以下を試しました

<?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" indent="yes" omit-xml-declaration="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/xml" xml:space="default">
        <xsl:apply-templates select="*" />
    </xsl:template>

    <xsl:template match="*" xml:space="default">
        <xsl:choose>
            <xsl:when test="name(.) = 'Item'">
                <xsl:text>"</xsl:text>
                <xsl:value-of select="normalize-space(./Item/Data[last()]/text())"/>
                <xsl:text>"</xsl:text>
            </xsl:when>
        </xsl:choose>
    </xsl:template>

</xsl:stylesheet>

このXMLで実行する場合:

<xml>
    <Item>
        <Item>
            <Data>105</Data>
            <Data>09/07/2012</Data>
        </Item>
    </Item>
</xml>

生産する"09/07/2012"

于 2012-09-21T06:44:51.537 に答える
3

私はあなたが試すことができると思います:

1行のすべて(迅速で汚い):

<xsl:when test="name(.) = 'Item'">"<xsl:value-of select="./Item/Data[last()]/text()"/>"</xsl:when>

または、次のようなタグを使用します(ベストプラクティス):

<xsl:when test="name(.) = 'Item'">
  <xsl:text>"</xsl:text>
    <xsl:value-of select="./Item/Data[last()]/text()"/>     
  <xsl:text>"</xsl:text>
</xsl:when>
于 2012-09-21T06:48:40.260 に答える
0

元のXMLソースにこれらの改行(インデント)が含まれている可能性があります。次のようにしてみてください。

<xsl:value-of select="concat('~', normalize-space(./Item/Data[last()]/text()), '~')"/>
于 2012-09-21T06:50:07.933 に答える
0

おそらく実装固有のバグですか?

xsltprocを使用すると、上記のすべてが期待どおりに機能しますが、裸の改行+空白+引用符+日付+引用符+改行+スペースの期待される結果は、/external/空白もコピーされることです。他のすべての例では、末尾の改行を含め、同じ13バイトが生成されます。

libxml 20706を使用して、libxslt10124およびlibexslt813xsltprocはlibxml20701に対してコンパイルされ、libxslt10124およびlibexslt813libxslt10124はlibxml20701に対してコンパイルされましたlibexslt813はlibxml20701に対してコンパイルされました

于 2013-08-08T15:41:12.280 に答える