如何使用 XSL 将 XML 属性值分配给下拉列表

Posted

技术标签:

【中文标题】如何使用 XSL 将 XML 属性值分配给下拉列表【英文标题】:How to assign XML attribute values to drop down list using XSL 【发布时间】:2010-06-01 05:28:01 【问题描述】:

我有一个示例 xml;

<?xml version="1.0" encoding="iso-8859-9"?>
    <DropDownControl id="dd1" name="ShowValues" choices="choice1,choice2,choice3,choice4">
</DropDownControl >

我需要使用 XSL 创建此 XML 的 UI 表示。我想用选择属性中指定的值填充下拉列表。 有人对此有任何想法吗? 在此先感谢:)

【问题讨论】:

【参考方案1】:

如果你搜索 ***,你应该会发现有很多关于字符串拆分的问题。

这里有一个,例如:

Comma Separated String Parsing

在您的情况下,您将如何使用它

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:template match="/DropDownControl">
      <select>
         <xsl:call-template name="split">
            <xsl:with-param name="list" select="@choices"/>
         </xsl:call-template>
      </select>
   </xsl:template>

   <xsl:template name="split">
      <xsl:param name="list" select="''"/>
      <xsl:param name="separator" select="','"/>
      <xsl:if test="not($list = '' or $separator = '')">
         <xsl:variable name="head" select="substring-before(concat($list, $separator), $separator)"/>
         <xsl:variable name="tail" select="substring-after($list, $separator)"/>
         <option>
            <xsl:value-of select="$head"/>
         </option>
         <xsl:call-template name="split">
            <xsl:with-param name="list" select="$tail"/>
            <xsl:with-param name="separator" select="$separator"/>
         </xsl:call-template>
      </xsl:if>
   </xsl:template>

</xsl:stylesheet>

这会产生以下 XML/html

<select>
<option>choice1</option>
<option>choice2</option>
<option>choice3</option>
<option>choice4</option>
</select>

如果您能够使用 XSLT2.0,则可以使用 tokenise 函数。有关示例,请参见此页面

Best way to split and render comma separated text as html

但是,我注意到您被标记为 asp.net 和 c#2.0 问题,这表明您将无法直接使用 XSLT2.0。

另一种选择是,鉴于转换是使用 C# 完成的,您可以在转换完成之前在后面的代码中进行拆分。编写一些代码来读取 XML,访问属性,使用 .Net 的字符串拆分功能,并将子元素附加到 DropDownControl 元素。

【讨论】:

以上是关于如何使用 XSL 将 XML 属性值分配给下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

将字符串值分配给 InnerText XML 属性值

如果祖先的属性使用 xsl 持有某个值,我如何删除属性和元素

如何使用 XSLT 在 XML 中设置属性?

使用 XSL 将 json 转换为 XML

如何使用xsl根据属性将xml的兄弟节点更改为父节点和子节点

如何将 TemplatedParent Content 属性分配给变量?