0

こんにちは、

XML を記述するプロセスを短縮するためのアイデアを誰かが持っているかどうか疑問に思っていました。現時点では、私はこれでアルファ段階にあるので、実際にはモックアップです. しかし、私は道の 1/4 にすぎず、非常に多くのコード行があることに気付きました!

VS2012 で xsd ファイルを使用できるかどうか疑問に思っていましたが、少し混乱しています。さらに、後でリンクされるデータベースと通信する必要があり、必要に応じて繰り返すxmlフィールドも必要です。

もう1つ、誰もがほとんど述べるアイデアを得ました...

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
4

1 に答える 1

0

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 ファイルを表示するときと同じように、1 行ずつ書き出すことができます。

于 2013-07-26T13:48:18.790 に答える