【问题标题】:Using C# to do xslt transform ignoring xsl:output使用 C# 进行 xslt 转换忽略 xsl:output
【发布时间】:2010-09-30 17:16:42
【问题描述】:

我正在我的 c# 程序中进行 xslt 转换。当我自己运行 xslt 时,它的输出很好,但是当我从我的 c# 程序中运行它时,它总是忽略:

<?xml version="1.0" encoding="UTF-8"?>

在生成的 xml 文档的顶部。我的 XSLT 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:hd="http://www.hotdocs.com/schemas/component_library/2009"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:xml="http://www.w3.org/XML/1998/namespace">

  <xsl:output method="xml" omit-xml-declaration="no" version="1.0" encoding="UTF-8"/>

  <xsl:template match="/xsd:schema">
     <hd:componentLibrary xmlns:hd="something" version="10">
     </hd:componentLibrary>
  </xsl:template>
  <xsl:template match="text()" />
</xsl:stylesheet>

我在我的 c# 程序中运行 xslt,如下所示:

XPathDocument myXPathDoc = new XPathDocument(PathToXMLDocument);
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(PathToXSLTDocument);
XmlTextWriter myWriter = new XmlTextWriter(PathToOutputLocation, null);
myXslTrans.Transform(myXPathDoc,null,myWriter);
myWriter.Close();

我尝试了没有 xsl:output 行的 xslt 文档,但这似乎没有帮助。

如何在输出的 xml 文件顶部获取 ?xml 标记?

谢谢

【问题讨论】:

  • new XmlTextWriter -- 这就是 2003 年!您还在使用 .NET Framework 1.1 吗?
  • 哈,不完全是。虽然坚持使用 .NET 2.0 sp2。还使用 VS 2005(不确定是否相关)。决定使用来自快速谷歌搜索的 XmlTextWriter。有更好的选择吗?说吧!
  • 这实际上解决了问题!使用现代课程总是很聪明。如果您想给出完整的答案,我会将其标记为已接受的答案。
  • 为什么这是一个问题,在任何情况下&lt;?xml version="1.0" encoding="UTF-8"?&gt; 是正确的声明,无论如何都可以省略它。

标签: c# xml xslt


【解决方案1】:

XmlTextWriter 有点过时了。我建议你切换到XmlWriter.Create

那么你可以在XmlWriterSettings中指定OmitXmlDeclaration = false。

【讨论】:

    【解决方案2】:

    如果您使用XmlWriter.Create(),那么您可以将XmlWriterSettings 实例作为参数传递。设置类中的OmitXmlDeclaration 成员控制是否包含标签。

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2019-03-13
      相关资源
      最近更新 更多