一重引用符の後のテキストを抽出する必要があります。
例えば:
<div>('show')</div>
変数は次のとおりです。
<xsl:variable name="showName" select="substring-before(substring-after(//x:div, '%28%27'), '%27%29')" />
結果は none、エンコーディング caractersです。
%28%27と%27%29は使えないと思います。正解です?。
ありがとう。
一重引用符の後のテキストを抽出する必要があります。
例えば:
<div>('show')</div>
変数は次のとおりです。
<xsl:variable name="showName" select="substring-before(substring-after(//x:div, '%28%27'), '%27%29')" />
結果は none、エンコーディング caractersです。
%28%27と%27%29は使えないと思います。正解です?。
ありがとう。
XSLT 1.0:
使用するだけです:
<xsl:variable name="vshowName" select=
'substring-before(substring-after(/*, "'"), "'")'/>
これが完全な変換です。
<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(/*, "'"), "'")'/>
<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(/*, "^[^']*'([^']*)'.*$", "$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)
正規表現に精通している場合は、 も使用できます<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>