2016-02-19 139 views
1

我有一個運行並添加以下到一個文件中的C#控制檯應用程序:如何使用C#在XML文件內添加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 /> 
    </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之間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") 
      ) 
     ) 
    ); 

有沒有什麼辦法可以用C#添加xsl樣式表,就像我做XML元素一樣?

回答

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") 
) 
.....