循环遍历数组变量并使用xsl创建节点

时间:2014-04-04 09:35:08

标签: c# xml xslt

我正在通过xsl

创建一个xml文件

我有一个xsl变量,它从包含脚本中的C#方法获取字符串数组的值。 现在我需要遍历数组变量并创建xml节点。 以下是我的代码。

<xsl:variable name="_arrInspectionTimes" select="(scripts:GetInspectionTime(normalize-space(openhouses/openhouse/openhouse_start), normalize-space(openhouses/openhouse/openhouse_end)))">
</xsl:variable>

<xsl:element name="inspectionTimes">
    <xsl:for-each select="$_arrInspectionTimes">
          <xsl:element name="inspection">
               <xsl:value-of disable-output-escaping="yes" select="."/>
         </xsl:element>
    </xsl:for-each>
</xsl:element>

我无法在循环内渲染节点。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

大多数与C#连接的XSLT处理器允许您在其本机数据模型中传递一组XML节点(例如XPathNodeIteratorXPathNavigator用于Microsoft XslCompiledTransform)但是对C#数组的支持不太可能。因此,找出您使用的.NET XSLT处理器并查看其文档,了解可以从扩展函数传递到XSLT以在XSLT中处理它的数据类型。例如http://msdn.microsoft.com/en-us/library/wxaw5z5e%28v=vs.110%29.aspx表明,从C#可以传入XPathNavigator或XPathNodeIterator来处理XslCompiledTransform中的节点。这意味着不是编写一个返回string[]的扩展函数,而是写一个返回XPathNodeIterator例如

public XPathNodeIterator GetInspectionTime (...) 
{
  XmlDocument doc = new XmlDocument();
  doc.AppendChild(doc.CreateElement("root"));
  foreach (string value in yourArray) 
  {
    XmlElement item = doc.CreateElement("item");
    item.InnerText = value;
    doc.DocumentElement.AppendChild(item);
  }
  return doc.CreateNavigator().Select("/root/item");
}