Мне удалось преобразовать простой xml-файл с данными в другой xml-файл (шаблон excel )с использованием шаблона xsl, вот как выглядит мой xsl-файл:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" standalone="yes"/>
<xsl:template match="/">
<xsl:processing-instruction name="mso-application">
<xsl:text>progid="Excel.Sheet"</xsl:text>
</xsl:processing-instruction>
...(stuff here)...
</xsl:template>
</xsl:stylesheet>
Результирующий xml-файл записывается правильно, НО за исключением включения
<?xml version="1.0"?>
вверху файла. Как я могу сделать так, чтобы он отображался вверху?
В настоящее время мой результирующий файл xml начинается с:
<?mso-application progid="Excel.Sheet"?>
...(rest of file)...
Но мне нужно, чтобы он сделал:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
.(rest of file)...
Я делаю это преобразование через форму Windows со следующим кодом:
XPathDocument myXPathDoc = new XPathDocument(xmlfile);
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(xslfile);
XmlTextWriter myWriter = new XmlTextWriter(xmlexcelfile, null);
myWriter.Formatting = Formatting.Indented;
myWriter.Namespaces = true;
myXslTrans.Transform(myXPathDoc, null, myWriter);
myWriter.Close();
Я пробовал играть с xsl:output standalone="yes/no"
, а также с omit-xml-declaration="no"
. Я также пробовал (в коде C #), добавляя myWriter.WriteStartDocument();
перед преобразованием, но это было запрещено. пытался искать ng онлайн для этого и продолжайте возвращаться к standalone="yes"
, но это не работает. Есть ли что-то, что мне здесь не хватает? О, и если вам интересно, почему мне нужно иметь
<?xml version="1.0"?>
в верхней части результирующего файла, это потому, что при открытии файла xml с помощью excel excel не распознает его правильно, но если он включен, то excel открывает его правильно...