4

一重引用符の後のテキストを抽出する必要があります。

例えば:

<div>('show')</div>

変数は次のとおりです。

<xsl:variable name="showName" select="substring-before(substring-after(//x:div, '%28%27'), '%27%29')" />

結果は none、エンコーディング caractersです。

%28%27%27%29は使えないと思います。正解です?。

ありがとう。

4

2 に答える 2

5

XSLT 1.0

使用するだけです:

 <xsl:variable name="vshowName" select=
 'substring-before(substring-after(/*, "&apos;"), "&apos;")'/>

これが完全な変換です。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:variable name="vshowName" select=
 'substring-before(substring-after(/*, "&apos;"), "&apos;")'/>

 <xsl:template match="/*">
  <xsl:value-of select="$vshowName"/>
 </xsl:template>
</xsl:stylesheet>

提供されたXMLドキュメントに適用する場合:

<div>('show')</div>

必要な正しい結果が生成されます:

show

XSLT 2.0

XSLT 2.0では、次の2つのアプローチのいずれかを使用できます。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:variable name="vPattern">
  ^[^']*'([^']*)'.*$
 </xsl:variable>

 <xsl:variable name="vshowName1" select="replace(/*, $vPattern, '$1', 'x')"/>

 <xsl:variable name="vshowName2" select=
 'replace(/*, "^[^&apos;]*&apos;([^&apos;]*)&apos;.*$", "$1", "x")'/>

 <xsl:template match="/*">
  <xsl:value-of select="$vshowName2"/>
===============
  <xsl:value-of select="$vshowName1"/>
 </xsl:template>
</xsl:stylesheet>

この変換が同じXMLドキュメント(上記)に適用されると、両方のXPath式の評価で同じ結果が生成されます

show
===============
show

注意してください

単一のXpath式(不要にする)を使用して、引用符で囲まれたすべてのxsl:analyze-stringサブストリングを抽出/処理する場合(そのようなサブストリングの数に制限はありません)、次の回答を参照してください。

https://stackoverflow.com/a/15402185/36305

最後に、を使用してxsl:analyze-string

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/*">
  <xsl:analyze-string select="." regex="'(.*?)'">
   <xsl:matching-substring>
     <xsl:sequence select="regex-group(1)"/>
   </xsl:matching-substring>
  </xsl:analyze-string>
 </xsl:template>
</xsl:stylesheet>

この変換が次のXMLドキュメントに適用される場合:

<div>('word1', 'word2', 'word3')</div>

正しい結果が生成されます:

word1 word2 word3

このコード(別の回答から)は間違っています:

<xsl:analyze-string select="//div" regex="'(.*)'">
  <xsl:matching-substring>
    <xsl:value-of select="regex-group(1)"/>
  </xsl:matching-substring>
  <xsl:non-matching-substring>
    <xsl:value-of select="."/>
  </xsl:non-matching-substring>
</xsl:analyze-string>

上記のXMLドキュメントに適用すると、次のように生成されます。

(word1', 'word2', 'word3)
于 2013-03-23T23:49:03.863 に答える
0

テクニック

正規表現に精通している場合は、 も使用できます<xsl:analyze-string>

コードサンプル

一重引用符の間のコンテンツを抽出します。コンテンツは後で ) を使用して参照されregex-group(1)ます。

<xsl:analyze-string select="//x:div" regex="'(.*)'">
  <xsl:matching-substring>
    <xsl:value-of select="regex-group(1)"/>
  </xsl:matching-substring>
  <xsl:non-matching-substring>
    <xsl:value-of select="."/>
  </xsl:non-matching-substring>
</xsl:analyze-string>
于 2013-03-24T00:32:58.430 に答える