Написание заголовка таблицы стилей XSLT - PullRequest
0 голосов
/ 18 января 2019

Я создаю приложение 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 голосов
/ 18 января 2019

Кажется, аргументы должны изменить позицию и использоваться должным образом.

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 (String, String, String, String)

При переопределении в производном классе записывает атрибут с указанным префиксом, локальным именем, URI пространства имен и значением.

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