我有一个大型XSD I进程,使用多个模板来获取新的XSD。 在最后一步中,我想确定在变量xsdresult中捕获的xml(实际上是XSD)的长度。
使用字符串长度函数,我看到一个奇怪的长度与xsdresult的可变长度不匹配。 string / xsd的大小超过52000个字符,但我看到长度:9862我做错了什么?
<!-- Catch output in variable -->
<xsl:variable name="xsdresult">
<xsl:call-template name="start"/>
</xsl:variable>
<xsl:template name="start">
<xsl:apply-templates/>
</xsl:template>
<!-- Build required doc parts -->
<xsl:variable name="docparts">
<xsl:call-template name="builddocparts"/>
</xsl:variable>
<xsl:template name="builddocparts">
Length: <xsl:value-of select="string-length(normalize-unicode($xsdresult))"/>
</xsl:template>
...
答案 0 :(得分:1)
对string-length()
的调用相当于对string-length(.)
的调用,后者又将当前节点强制转换为字符串,因此它等同于string-length(string(.))
。 string()
函数的值是节点的字符串值,对于元素节点,它是由所有后代文本节点的串联形成的字符串。
如果您想知道序列化XML文档在磁盘上占用的最小空间量,给定一个简单的序列化,那么您必须添加:
<
... >
的加2,以及属性值规范的长度之和。'
或"
替换。<
,转义为<
的三个字符。&
的四个字符。不是最低金额的一部分,但可能是磁盘上所需空间的一部分:
<![CDATA[
+ ]]>
)。<
和&
保存的字符数。