【问题标题】:Append XSLT Stylesheet to XML Document将 XSLT 样式表附加到 XML 文档
【发布时间】:2013-05-29 21:13:39
【问题描述】:

我想将我的 XSLT 样式表附加到我创建的 XML 文档中。

XML 文档代码

使用以下代码创建 XML 文档:

Private Sub CreateXML(ByVal ds1 As StatusProd.dsAssemblies, ByVal ReportName As String)
    ReportName = ReportName.Replace(".rdlc", "")
    Dim w As New XmlTextWriter(ReportName & ".xml", System.Text.Encoding.UTF8)

    w.WriteStartDocument(True) 'Start document
    w.Formatting = Formatting.Indented
    w.Indentation = 2

    w.WriteStartElement("Table") 'Start table
    For Each row As DataRow In ds1.Tables(0).Rows
        w.WriteStartElement("Assemblies")
        w.WriteStartElement("MachineNo")
        w.WriteString(row(0))
        w.WriteEndElement()

        w.WriteStartElement("Description")
        w.WriteString(row(1))
        w.WriteEndElement()

        w.WriteStartElement("Client")
        w.WriteString(row(2))
        w.WriteEndElement()

        w.WriteStartElement("DateTransfer")
        w.WriteString(row(4))
        w.WriteEndElement()
        w.WriteEndElement()
    Next

    w.WriteEndElement() 'End table
    w.WriteEndDocument() 'End document
    w.Close()
End Sub

XSLT 附加到 XML

我尝试在我的 XML 文档创建器末尾添加以下代码并收到错误:无法在指定位置插入节点

'Append XSL to XML
Dim doc As New XmlDocument
doc.Load("rptStatusProd.xml")
doc.PrependChild(doc.CreateProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'"))
doc.Save(w)

最终的 XML 文档结果

我想在我的 XML 文档的第二行添加我的处理指令,如下所示:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="Fetch.xslt"?>

我一直在尝试重现这个:

http://www.w3schools.com/xsl/xsl_transformation.asp

【问题讨论】:

  • 您试图在 XML 中的什么位置添加处理指令?以及从 rptStatusProd.xml 加载到哪个 XML - XMLTextWriter 或 xml? prepend 不适用于 doc,因为 Load 将在 doc 的开头添加一个 xml 声明,我相信你不能在 xml 声明之前放置一个处理指令。
  • @alergy 我更新了尝试添加处理指令的位置。最初我希望将它直接添加到 XmlTextWriter 中,从而节省一些空间。但我正在尝试其他方法并决定加载 rptStatusProd.xml 文件,然后重新保存所有内容
  • 您遇到的问题仍然是 rptStatusProd.xml 将被附加到 XmlTextWriter 输出,即在&lt;/Table&gt; 之后您将得到&lt;?xml... - 出于兴趣,您为什么不能打电话给w.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'")?我知道您说过您选择了不同的方向,但看起来这将是实现您的目标的方式。
  • @alergy 嘿,nvm 我之前说的。我尝试了一些不同的方法,它奏效了。如果您想将其发布为答案,我很乐意投票并接受它。完美地工作。至于所有其他答案,我感谢您的帮助,您的答案绝对值得投票。谢谢!
  • 很高兴为您提供帮助 - 我已将我的 cmets 合并为一个答案。

标签: xml vb.net xslt append


【解决方案1】:

试试

doc.DocumentElement.PrependChild(doc.CreateProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'"))

您不能在文档根目录前添加任何内容。不过,您可以在文档元素中添加一些内容。

【讨论】:

  • 我的doc.Load("rptStatusProd.xml) 有问题。显然它正在被另一个进程使用...我正在尝试弄清楚如何杀死该进程以尝试您的建议
【解决方案2】:

通过尝试前置,您会与标题节点发生冲突;而不是前置,使用InsertAfter:

XmlProcessingInstruction pi = doc.CreateProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'");
doc.InsertAfter(pi, doc.FirstChild);

【讨论】:

    【解决方案3】:

    前置不适用于 doc,因为Load 将在 doc 的开头添加 xml 声明,我相信您不能在 xml 声明之前放置处理指令。

    您可能遇到的另一个问题是 rptStatusProd.xml 将被附加到 XmlTextWriter 输出,即在 &lt;/Table&gt; 之后您将得到 &lt;?xml... - 您可以这样称呼:

    w.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Fetch.xslt'")

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 2016-10-18
      • 2010-11-10
      • 1970-01-01
      • 2012-09-21
      • 2010-10-27
      • 1970-01-01
      • 2014-12-20
      相关资源
      最近更新 更多