如何使用C#在XML文件中添加XSL样式表?

时间:2016-02-19 11:09:28

标签: c# xml xslt

我有一个C#控制台应用程序,它运行并将以下内容添加到文件中:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <qf:VisualTemplate xmlns:qf="http://www.Qnomy.com/Templates" version="1.0" description="test doc">
      <qf:Styles />
      <qf:Parameters />
      <qf:SampleData />
      <qf:Design />
    </qf:VisualTemplate>

它使用这段代码来做到这一点:

        var doc = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XElement(ns + "VisualTemplate",
                new XAttribute(XNamespace.Xmlns + "qf", url),
                new XAttribute("version", "1.0"),
                new XAttribute("description", "test doc"),
                    new XElement(ns + "Styles"),
                    new XElement(ns + "Parameters"),
                    new XElement(ns + "SampleData"),
                     new XElement(ns + "Design")
            )
        );

我还需要在qf:Design节点之间添加一个嵌入的xsl样式表,如下所示:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<qf:VisualTemplate xmlns:qf="http://www.Qnomy.com/Templates" version="1.0" description="test doc">
  <qf:Styles />
  <qf:Parameters />
  <qf:SampleData />
  <qf:Design>
     <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
       </xsl:stylesheet>
  </qf:Design>
</qf:VisualTemplate>

我尝试过这样做,就像创建xml一样,但我不能使用xsl作为命名空间:

    var url2 = "http://www.w3.org/1999/XSL/Transform";

    var ns2 = XNamespace.Get(url2);

    var d = doc.Descendants(ns + "Design").First();

    d.AddBeforeSelf(new XComment("Place your HTML elements here"));
    d.Add(
        new XElement(ns + "Design",
            new XElement(ns2 + "stylesheet",
                new XAttribute(XNamespace.Xmlns + "xsl", ""),
                new XAttribute("version", "1.0")
            )
        )
    );

有没有什么方法可以像我完成XML元素一样用C#添加xsl样式表?

1 个答案:

答案 0 :(得分:0)

根据您的预期输出XML,xsl前缀应该绑定到"http://www.w3.org/1999/XSL/Transform",而不是空字符串:

.....
new XElement(ns2 + "stylesheet",
    new XAttribute(XNamespace.Xmlns + "xsl", "http://www.w3.org/1999/XSL/Transform"),
    new XAttribute("version", "1.0")
)
.....