xml - 使用 xslt 将字符转换为 xml 节点

标签 xml xslt

<xsl:variable name="string" select="'abcdefghijklmnopqrstuvwxyz'" />

我需要将此字符串转换为一个节点,按 5 个字符分组,显然最后一组可以小于或等于 5 个字符,具体取决于输入字符串

<node>
  <a>abcde</a>
  <a>fghij</a>
  <a>klmno</a>
  <a>pqrst</a>
  <a>uvwxy</a>
  <a>z</a>
</node>

最佳答案

这种转变:

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

 <xsl:param name="pStr" select="'abcdefghijklmnopqrstuvwxyz'" />
 <xsl:param name="pChunkSize" select="5"/>

 <xsl:template match="/*">
  <node>
    <xsl:call-template name="split"/>
  </node>
 </xsl:template>

 <xsl:template name="split">
  <xsl:param name="pStr" select="$pStr" />
  <xsl:param name="pChunkSize" select="$pChunkSize"/>

  <xsl:variable name="pRemLength" select="string-length($pStr)"/>

  <xsl:if test="$pRemLength">
   <a><xsl:value-of select="substring($pStr, 1, $pChunkSize)"/></a>

   <xsl:call-template name="split">
    <xsl:with-param name="pStr" select="substring($pStr, $pChunkSize+1)"/>
    <xsl:with-param name="pChunkSize" select="$pChunkSize"/>
   </xsl:call-template>
  </xsl:if>

 </xsl:template>
</xsl:stylesheet>

当应用于任何 XML 文档(未使用)时,会产生所需的正确结果:

<node>
   <a>abcde</a>
   <a>fghij</a>
   <a>klmno</a>
   <a>pqrst</a>
   <a>uvwxy</a>
   <a>z</a>
</node>

解释:原始递归,没有字符串长度作为停止条件,并且每个递归步骤都会生成下一个 block 并将其从字符串中删除。

关于xml - 使用 xslt 将字符转换为 xml 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798108/

相关文章:

java - 在 java MalformedurException 中解析 XML

java - 在计算机之间移动后启动应用程序时出现 IllegalStateException

java - JAXB 包装的通用对象的 Setter 方法从未被调用

javascript - 在 XSLT 中获取 XML 元素

c# - 错误消息 URI 未标识外部 Java 类

XSLT 应该只处理具有相同日期的节点一次

javascript - 检索 xml 文件中的值并在 Javascript 的另一个函数中使用它

xml - 如何在 XSLT 中从另一个模板调用模板?

xml - 如何使用 XSLT 合并 2 个具有公共(public)节点的 XML 文件?

xml - 在 Flex 中执行 XML 转换