gpt4 book ai didi

linux - 如何处理 ".xsl"文件中的字符串数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:09 25 4
gpt4 key购买 nike

我在 .xsl 文件中有一个字符串数组,现在我必须使用不同的空格分隔的每个字符串。如何获取字符串?

我有以下字符串数组:

strarray="hw.oh.xml hg.hd.gnl th.ik.lkj"

我必须分别获取 "hw.oh.xml"、 "hg.hd.gnl"、 "th.ik.lkj"字符串才能对其执行一些操作。

我该怎么做?

最佳答案

有很多方法可以做到这一点:

我。使用 XPath substring-before()substring-after()功能:

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

<xsl:variable name="vStrArray" select="'hw.oh.xml hg.hd.gnl th.ik.lkj'"/>

<xsl:template match="/">
<xsl:value-of select="substring-before($vStrArray, ' ')"/>
<xsl:text>&#xA;</xsl:text>

<xsl:value-of select="substring-before(substring-after($vStrArray, ' '),' ')"/>
<xsl:text>&#xA;</xsl:text>
<xsl:value-of select="substring-after(substring-after($vStrArray, ' '),' ')"/>
<xsl:text>&#xA;</xsl:text>
</xsl:template>
</xsl:stylesheet>

当此转换应用于任何 XML 文档(未使用)时,会生成所需的结果(“数组”中的每个项目):

hw.oh.xml
hg.hd.gnl
th.ik.lkj

这种方法很快就会变得非常复杂,除了只有 2-3 项的“数组”外,不推荐使用。

二。在 XSLT 1.0 中将“数组”表示为 XML 文档:

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

<my:array>
<item>hw.oh.xml</item>
<item>hg.hd.gnl</item>
<item>th.ik.lkj</item>
</my:array>

<xsl:variable name="vStrArray"
select="document('')/*/my:array/*"/>

<xsl:template match="/">
<xsl:value-of select="$vStrArray[1]"/>
<xsl:text>&#xA;</xsl:text>

<xsl:value-of select="$vStrArray[2]"/>
<xsl:text>&#xA;</xsl:text>
<xsl:value-of select="$vStrArray[3]"/>
<xsl:text>&#xA;</xsl:text>
</xsl:template>
</xsl:stylesheet>

当此转换应用于同一 XML 文档(任何)时,会产生所需的正确结果:

hw.oh.xml
hg.hd.gnl
th.ik.lkj

我推荐这种表示“数组”的方法——用于 XSLT 1.0 应用程序

III. XSLT 2.0/XPath 2.0

简单地使用一系列字符串:

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

<xsl:variable name="vStrArray"
select="'hw.oh.xml', 'hg.hd.gnl', 'th.ik.lkj'"/>

<xsl:template match="/">
<xsl:sequence select=
"for $i in 1 to count($vStrArray)
return
concat($vStrArray[$i], '&#xA;')
"/>
</xsl:template>
</xsl:stylesheet>

结果:

 hw.oh.xml
hg.hd.gnl
th.ik.lkj

更新:OP 评论说他坚持使用包含在单个字符串中的空格分隔值的初始表示。

IV.将空格分隔值字符串转换为 XML 片段以便于使用

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

<xsl:variable name="vStrArray" select="'hw.oh.xml hg.hd.gnl th.ik.lkj'"/>

<xsl:variable name="vrtfDoc">
<xsl:call-template name="makeIndex">
<xsl:with-param name="pText" select="$vStrArray"/>
</xsl:call-template>
</xsl:variable>

<xsl:variable name="vStrIndex" select="ext:node-set($vrtfDoc)/*"/>

<xsl:template match="/">
<xsl:value-of select="$vStrIndex[1]"/>
<xsl:text>&#xA;</xsl:text>
<xsl:value-of select="$vStrIndex[2]"/>
<xsl:text>&#xA;</xsl:text>
<xsl:value-of select="$vStrIndex[3]"/>
</xsl:template>

<xsl:template name="makeIndex">
<xsl:param name="pText"/>

<xsl:if test="string-length($pText)>0">
<item>
<xsl:value-of select=
"substring-before(concat($pText,' '), ' ')"/>
</item>
<xsl:call-template name="makeIndex">
<xsl:with-param name="pText" select=
"substring-after($pText,' ')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

此转换从字符串创建一个 XML 片段,其中每个 <item>元素仅包含一个字符串值。那么它的使用就好像它是一个数组一样。

关于linux - 如何处理 ".xsl"文件中的字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5945430/

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