编写XSLT样式表标题

时间:2019-01-17 22:53:35

标签: c# xslt xmlwriter

我正在构建一个C#应用程序,它将基于预先配置的文件构建XSLT文件。

我可以生成XSLT文件,并且该文件接近我想要的文件,但是我遇到了一些问题。

问题1:
XSLT文件顶部的样式表标题格式很奇怪。这是我所期望的:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="1.0" xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">

这就是我得到的:

<xsl:stylesheet p1:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="1.0" xmlns="urn:schemas-microsoft-com:office:spreadsheet" p3:o="urn:schemas-microsoft-com:office:office"
p3:x="urn:schemas-microsoft-com:office:excel" p3:ss="urn:schemas-microsoft-com:office:spreadsheet" p3:html="http://www.w3.org/TR/REC-html40" xmlns:p3="xmlns" xmlns:p1="stylesheet"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

这是C#代码:

//Write the namespaces for the xslt
        xmlWriter.WriteStartElement("xsl", "stylesheet", "http://www.w3.org/1999/XSL/Transform");
        xmlWriter.WriteAttributeString("xs", "stylesheet", "http://www.w3.org/2001/XMLSchema");
        xmlWriter.WriteAttributeString("exclude-result-prefixes", "xs");
        xmlWriter.WriteAttributeString("version", "1.0");
        xmlWriter.WriteAttributeString("xmlns", "urn:schemas-microsoft-com:office:spreadsheet");
        xmlWriter.WriteAttributeString("o", "xmlns", "urn:schemas-microsoft-com:office:office");
        xmlWriter.WriteAttributeString("x", "xmlns", "urn:schemas-microsoft-com:office:excel");
        xmlWriter.WriteAttributeString("ss", "xmlns", "urn:schemas-microsoft-com:office:spreadsheet");
        xmlWriter.WriteAttributeString("html", "xmlns", "http://www.w3.org/TR/REC-html40");

问题2:
在我的XSLT文件的整体中,似乎在多个位置显示了这些“ p”声明。在上面的输出中,一个示例是:

p3:x="urn:schemas-microsoft-com:office:excel"

我认为我在某种程度上误调用了该方法,但是我不确定如何更正此问题。

1 个答案:

答案 0 :(得分:1)

似乎参数需要改变位置并以适当的方式使用。

ref:https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmlwriter.writeattributestring?view=netframework-4.7.2

在您的情况下,应写为

例如:

xmlWriter.WriteAttributeString("xmlns", "ss", null, "urn:schemas-microsoft-com:office:spreadsheet");

因为 WriteAttributeString (字符串,字符串,字符串,字符串)

在派生类中重写时,写出具有指定前缀,本地名称,名称空间URI和值的属性。

public void WriteAttributeString (string prefix, string localName, string ns, string value);