gpt4 book ai didi

xslt - 在 XSLT 中提取单引号之间的文本

转载 作者:行者123 更新时间:2023-12-05 01:09:39 24 4
gpt4 key购买 nike

需要提取 之后的文本单引号 .

例如。:

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

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

结果是没有, encoding caracters .

我觉得不能用 %28%27 %27%29 .这是对的?。

谢谢。

最佳答案

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 中,可以使用以下两种方法之一:
<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)

关于xslt - 在 XSLT 中提取单引号之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15593106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com