2014-09-24 166 views
0

我已经阅读并且找不到任何如何执行此操作的良好示例。我试图创建编程文件看起来是这样的:以编程方式创建xml属性

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:template match="/"> 
<html> 
    <head> 
    <title> title here </title> 
    </head> 
    <body> 
    <xsl:apply-templates /> 
    </body> 
</html> 
</xsl:template> 
<xsl:template match="data"> 
<table width="400" border="1"> 
    <tr bgcolor="#a0acbc"> 
    <td></td> 
    <td></td> 
    </tr> 
    <xsl:for-each select="row"> 
    <tr> 
     <td> 
     <xsl:value-of select="" /> 
     </td> 
     <td> 
     <xsl:value-of select="" /> 
     </td> 
    </tr> 
    </xsl:for-each> 
</table> 
</xsl:template> 
</xsl:stylesheet> 

我见过一些例子,但我不知道如何使它看起来完全一样,与“样式的xmlns:XLS =。 ...“以及表格和tr上的属性。

有人可以帮我解决这个问题,或者发表一些很好的例子吗?

+2

你有没有看任何一个'XDocument','XmlDocument'或'XmlWriter'? – 2014-09-24 06:51:49

回答

2

你需要使用命名空间(也就是“XSL:”在元素的名称)

我不会做整个事情给你,但这应该帮助你点在正确的方向: 你需要前缀元素名称和使用命名空间属性,像这样:

using System.IO; 
using System.Xml; 
using System.Xml.Linq; 

namespace XSLCreator 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     XNamespace xsl = XNamespace.Get("http://www.w3.org/1999/XSL/Transform"); 

     var doc = new XDocument(
      new XElement(xsl + "stylesheet", 
       new XAttribute(XNamespace.Xmlns + "xsl", xsl), 
       new XAttribute("version", "1.0") 
      ) 
     ); 

     var sw = new StreamWriter("test.xml"); 
     XmlWriter xw = new XmlTextWriter(sw); 
     doc.WriteTo(xw); 
     xw.Close(); 
     sw.Close(); 
     } 
    } 
} 

你会得到一个XML文档,看起来像这样:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" /> 
+0

我个人会使用XmlWriter.WriteStartElement,XmlWriter.WriteAttribute,XmlWriter.WriteEndElement等,而不是在内存中创建一个文档,然后序列化它。 – 2014-09-24 08:24:31

相关问题