gpt4 book ai didi

xml - 将字符附加到 XSL 中的字符串

转载 作者:行者123 更新时间:2023-12-04 05:03:44 24 4
gpt4 key购买 nike

此 XML 具有要附加的字符串、字符串长度和要附加的字符的详细信息。

<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
<input>
<string>Auckland</string>
<len>12</len>
<char>#</char>
</input>

<input>
<string>Ohio</string>
<len>3</len>
<char>*</char>
</input>
</data>

我还有一个 XSLT,它应该(理想情况下)使用这个逻辑:
while(字符串长度<指定长度){
连接(字符,字符串)
}
别的
{ 将字符串截断为指定长度}
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template name="append" match="/">
<xsl:param name="char"></xsl:param>
<xsl:param name="string"></xsl:param>
<xsl:param name="len"></xsl:param>
<xsl:value-of select="$string" />
<html>
<body>
<xsl:for-each select="data/input">
<xsl:choose>
<xsl:when test="string-length(string) &lt; len" >
<xsl:call-template name="append">
<xsl:with-param name="char" select="char" />
<xsl:with-param name="string" select="concat(char,string)" />
<xsl:with-param name="len" select="len" />
</xsl:call-template>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

出于某种原因,循环没有按预期工作。循环执行一次并显示结果。

例如,对于第一个 XML 输入,输出应该是 ####Auckland,但结果是 #Auckland。你能帮我找出这段代码中的缺陷吗?在此先感谢您的帮助。

最佳答案

当我尝试你的 XSLT 时,我没有得到任何文本输出,主要是因为在你的代码中,你的名字是 附加 模板需要 的参数字符串 但是您使用 的参数调用它领域长度分别。此外,您的命名模板也与顶级文档元素匹配,并且目前它将输出 html 多次。

有一个匹配的模板也是一个命名模板是完全没问题的。试试这个 XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="data/input"/>
</body>
</html>
</xsl:template>

<xsl:template match="input" name="append">
<xsl:param name="char" select="char"/>
<xsl:param name="string" select="string"/>
<xsl:param name="length" select="number(len)"/>
<xsl:choose>
<xsl:when test="string-length($string) &lt; $length">
<xsl:call-template name="append">
<xsl:with-param name="char" select="$char"/>
<xsl:with-param name="string" select="concat($char,$string)"/>
<xsl:with-param name="length" select="$length"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<div>
<xsl:value-of select="$string"/>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

应用于您的 XML 时,输出如下
<html>
<body>
<div>####Auckland</div>
<div>Ohio</div>
</body>
</html>

注意参数默认值的使用。第一次访问模板时,通过模板匹配,值将默认为相关元素的值。当您随后将其作为命名模板调用时,它将使用您传递给它的值作为参数。

编辑:如果您希望截断超过所需长度的值,只需替换现有的 <xsl:value-of select="$string"/>用这一行代替:
<xsl:value-of select="substring($string, 1, $length)"/>

关于xml - 将字符附加到 XSL 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15793955/

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