【问题标题】:Way to Improve XML Writing in VB.Net在 VB.Net 中改进 XML 编写的方法
【发布时间】:2013-07-09 20:17:15
【问题描述】:

下午好,

我想知道是否有人有任何想法来缩短我编写 XML 的过程。目前我正处于 Alpha 阶段,所以它真的是一个模型。但我意识到我只有 1/4 的路,而且有这么多的代码行!

我想知道我能否在 VS2012 中使用 xsd 文件 - 但我有点困惑。另外,我需要它与稍后将链接到的数据库通信,并且如果需要,还需要重复的 xml 字段。

另一件事,任何人都有一个想法要陈述几乎......

if Field is null then 

not write xmlfield

类似的东西!

提前非常感谢,我愿意接受建议 - 但我也不希望您为我编写所有代码 - 只是轻轻推动并建议是否有更简单的方法来编写如此大量的数据。

Sub XML()

    Dim theDate As Date
    theDate = Now.Date
    Dim ymd As String = theDate.ToString("yyyyMMdd")

    Dim enc As System.Text.Encoding

    enc = System.Text.Encoding.GetEncoding("ISO-8859-1")

    Dim settings As XmlWriterSettings = New XmlWriterSettings

    settings.Indent = True
    settings.Encoding = enc

    Using writer As XmlWriter = XmlWriter.Create("C:\Test.xml", settings)
        writer.WriteStartDocument()
        writer.WriteDocType("ONIXMessage", Nothing, "http://www.editeur.org/onix/2.1/reference/onix-international.dtd", Nothing)

        writer.WriteStartElement("ONIXMessage")
        writer.WriteAttributeString("release", "2.1")

        writer.WriteStartElement("Header")

        ' write next element 
        writer.WriteStartElement("FromCompany")
        writer.WriteString(My.Settings.PublisherName)
        writer.WriteEndElement()

        '' write one more element 
        writer.WriteStartElement("FromPerson")
        writer.WriteString(My.Settings.ContactName)
        writer.WriteEndElement()

        writer.WriteStartElement("FromEmail")
        writer.WriteString(My.Settings.PublisherEmail)
        writer.WriteEndElement()

        writer.WriteStartElement("ToCompany")
        writer.WriteString("sono")
        writer.WriteEndElement()

        writer.WriteStartElement("SendDate")
        writer.WriteString(ymd)
        writer.WriteEndElement()

        writer.WriteEndElement()

        writer.WriteStartElement("Product")

        writer.WriteStartElement("RecordReference")
        writer.WriteString(Form1.ebinfoISBN.Text & "_" & My.Settings.PublisherName)
        writer.WriteEndElement()

        writer.WriteStartElement("NotificationType")
        writer.WriteString(Form1.ebinfoNotificationType.SelectedValue)
        writer.WriteEndElement()

        writer.WriteStartElement("ProductIdentifier")
        writer.WriteStartElement("ProductIDType")
        writer.WriteString("15")
        writer.WriteEndElement()
        writer.WriteStartElement("IDValue")
        writer.WriteString(Form1.ebinfoISBN.Text)
        writer.WriteEndElement()
        writer.WriteEndElement()

        writer.WriteStartElement("ProductForm")
        writer.WriteString("DG")
        writer.WriteEndElement()
        writer.WriteStartElement("EpubType")
        writer.WriteString(Form1.ebinfoEBFormat.SelectedValue)
        writer.WriteEndElement()

        writer.WriteStartElement("Title")

        writer.WriteStartElement("TitleType")
        writer.WriteString("01")
        writer.WriteEndElement()

        writer.WriteStartElement("TitleText")
        writer.WriteString(Form1.ebinfoTitle.Text)
        writer.WriteEndElement()

        writer.WriteStartElement("TitlePrefix")
        writer.WriteString(Form1.ebinfoTprefix.Text)
        writer.WriteEndElement()

        writer.WriteStartElement("Subtitle")
        writer.WriteString(Form1.ebinfoSTitle.Text)
        writer.WriteEndElement()

        writer.WriteEndDocument()

        writer.Close()

    End Using

End Sub

【问题讨论】:

  • 是的 - 不要使用XmlWriter。使用 LINQ to XML 在内存中构建整个文档。它会简单得多。如果你真的想的话,你甚至可以在 VB 中使用 XML 文字。
  • 谢谢乔恩。看起来是一个更好的主意!我现在把它作为参考。您知道如何将其推送到文件中吗?
  • 是的,你使用XDocument.Save
  • 别这么认为,我只是想导出一个文件,而不是序列化设置数据:)

标签: xml vb.net visual-studio-2012 xml-serialization


【解决方案1】:

我找到了一种使用 LINQ 的方法

Imports System.Xml
Imports System.Xml.Linq
Imports System.Linq

Dim documenttype = New XDocumentType("ONIXMessage", Nothing, "http://www.editeur.org/onix/2.1/reference/onix-international.dtd", Nothing)


    Dim Doc As New XDocument(documenttype)

    Doc = <?xml version="1.0" encoding="ISO-8859-1"?>


          <ONIXMessage release="2.1">
              <Header>
                  <FromCompany><%= My.Settings.Var %></FromCompany>
                  <FromPerson><%= My.Settings.VAR%></FromPerson>
                  <FromEmail><%= My.Settings.var%></FromEmail>
                  <ToCompany></ToCompany>
                  <SendDate><%= ymd %></SendDate>
              </Header>


   Doc.AddFirst(documenttype)
    Doc.Save("C:\Tester.xml")

我可以继续逐行写出,就像查看 XML 文件时读取的一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多