【问题标题】:Ignore doctype DTD but keep it in the transformed XML C#忽略文档类型 DTD,但将其保留在转换后的 XML C# 中
【发布时间】:2015-04-20 08:23:13
【问题描述】:

我需要转换一个在标题中包含此文档类型的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DOC SYSTEM "ts.dtd">
<?xml-stylesheet type="text/css" href="ts.css"?>

转换进行得很好,但在 XSL 转换后 doctype 消失了,我在 XmlReaderSettings 上尝试了各种设置,但无法正常工作。

这是我的代码:

XslCompiledTransform xctTransformer = new XslCompiledTransform();
xctTransformer.Load(fiXSL.FullName);

XmlReaderSettings xrsReaderSettings = new XmlReaderSettings();
xrsReaderSettings.ConformanceLevel = ConformanceLevel.Document;
xrsReaderSettings.DtdProcessing = DtdProcessing.Ignore;
xrsReaderSettings.XmlResolver = null;
xrsReaderSettings.CloseInput = true;
xrsReaderSettings.IgnoreWhitespace = false;

XmlWriterSettings xwsWriterSettings = new XmlWriterSettings();
xwsWriterSettings.Indent = true;

XmlReader xrReader = XmlReader.Create(fiXML.FullName, xrsReaderSettings);
XmlWriter xwWriter = XmlWriter.Create(fiXML.FullName.Substring(0, fiXML.FullName.Length - 4) + "_TRANS.xml", xwsWriterSettings);

// Transform the XML using the XSL
xctTransformer.Transform(xrReader, xwWriter);
xctTransformer = null;

// Close reader + writer
xrReader.Close();
xwWriter.Close();

【问题讨论】:

    标签: c# .net xml xslt transform


    【解决方案1】:

    DOCTYPE 节点不是 XSLT/XPath 数据模型的一部分,因此您无法使用 XSLT 处理和复制它。如果您希望最终结果具有特定的 DOCTYPE 声明,那么使用 XSLT 的唯一方法是确保您的样式表中有 xsl:outputdoctype-system="ts.dtd"

    【讨论】:

    • @JaimyPorter 不要尝试在 cmets 中发布代码。不过,您应该做的是接受 Martin 的回答,如果它解决了您的问题。
    【解决方案2】:

    我刚刚发现的另一个答案是以这种方式通过 XSL 以文本方式添加它:

    <xsl:template match="/">
        <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE DOC SYSTEM "ts.dtd"&gt;</xsl:text>
        <xsl:copy>
            <xsl:apply-templates select = "*|@*|comment()|processing-instruction()|text()"/>
        </xsl:copy>
    </xsl:template>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-09
      • 2017-04-20
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2023-03-22
      相关资源
      最近更新 更多