xslt - 如何在 XSLT 中遍历 XML 参数

标签 xslt msxsl

我有一个要通过 XSLT 转换的 XML 文件。我通过 C# 将 XML 作为参数传递给 XSLT。参数的名称是附件,它包含 XML。写法如下:

StringWriter sw = new StringWriter(); 
XmlTextWriter w = new XmlTextWriter(sw); 
w.WriteStartElement("root"); 
if (!string.IsNullOrEmpty(sWordFileName)) { 
    w.WriteStartElement("mylink", sWordFileName); 
    w.WriteEndElement(); 
}
if (!string.IsNullOrEmpty(sPDFFileName)) { 
    w.WriteStartElement("mylink", sPDFFileName);
    w.WriteEndElement();
}
w.Close();
XPathDocument doc = new XPathDocument(new StringReader(sw.ToString()));
XPathNavigator nav = doc.CreateNavigator();
_exportSet[currentExportSet].Format.ParamList["attachment"] = nav.Select("./*");

我的 xml 参数看起来像

<root><attachment xmlns=file1><attachment xmlns=file2></root>

现在在 XSLT 中,我需要遍历此 XML 参数并创建一个链接。

这是我的 XSLT

<?xml version="1.0" encoding="utf-8"?> 
    <xsl:stylesheet version="2.0" xmlns:xsl="w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
        xmlns:my-scripts="urn:my-scripts" 
        xmlns="factiva.com/fcs/schemas/newsSummaries">

        <xsl:param name="attachment"/>
        <xsl:for-each select="$attachment">  
            <a target="_blank" href="#"><xsl:copy-of select="."/></a>  
         </xsl:for-each>
     </xsl:stylesheet>

但它不会创建链接。

最佳答案

XSLT 参数不同于 XML 标记名称。使用标记传递参数,如 here 所述.

如以下评论所述,此问题与上面链接中提供的问题没有太大区别。

StringWriter sw = new StringWriter(); 
XmlTextWriter w = new XmlTextWriter(sw); 
w.WriteStartElement("root"); 
if (!string.IsNullOrEmpty(sWordFileName)) { 
    w.WriteStartElement("attachment", sWordFileName); 
    w.WriteAttributeString("name", sWordFileName);
    w.WriteEndElement(); 
}
if (!string.IsNullOrEmpty(sPDFFileName)) { 
    w.WriteStartElement("attachment");
    w.WriteAttributeString("name", sPDFFileName);
    w.WriteEndElement();
}
w.WriteEndElement();
w.Close();
XPathDocument doc = new XPathDocument(new StringReader(sw.ToString()));
XPathNavigator nav = doc.CreateNavigator();

XsltArgumentList xslArg = new XsltArgumentList();
xslArg.AddParam("attachment","",nav);

这里将是 XSL 以匹配每个 Accessing parameters which contain mark-up :

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" 
   xmlns:xsl="w3.org/1999/XSL/Transform"
   xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
   xmlns:my-scripts="urn:my-scripts" 
   xmlns="factiva.com/fcs/schemas/newsSummaries">
    <xsl:param name="attachment" />

    <xsl:template match="/">
        <xsl:apply-templates select="$attachment"/>
    </xsl:template>
    <xsl:template match="attachment">
        <a target="_blank" href="{@name}">{@name}</a>
    </xsl:template>

</xsl:stylesheet>

关于xslt - 如何在 XSLT 中遍历 XML 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5095483/

相关文章:

java - 如何在java中修改xml-stylesheet属性值

.net - 使用程序集在引用的 XSL 模板中编写脚本

xml - 如何将 XML 保存到文件

c# - 在 msxsl 标记内的外部文件中引用 C# 代码

javascript - 通过子进程连接Java应用程序后如何在node.js中写入文件

sql - 使用 XSLT 转换将 XML 文档导出为关系数据库的说明

javascript - 使用 XSLT 渲染 xhtml 兼容页面将无法正确渲染过去的内联 javascript block

java - XSLT 性能注意事项

c# - 在 msxsl 中使用程序集和命名空间的问题

.net - .NET 2 或 .NET 4 中的 msxsl 内存泄漏错误是否已修复?