我正在通过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>
我无法在循环内渲染节点。有人可以帮忙吗?
答案 0 :(得分:0)
大多数与C#连接的XSLT处理器允许您在其本机数据模型中传递一组XML节点(例如XPathNodeIterator
或XPathNavigator
用于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");
}