2

私はかなり長い間この壁に頭を悩ませてきたので、専門家に聞いてみようと思いました.

あるコンピューターから次のコンピューターに xml 文字列を送信する必要があります。xml を次のようにフォーマットしたいと思います。

<xml>
  <author>Joe the Magnificent</author>
  <title>Joe Goes Home</title>
</xml>

誰でも助けてもらえますか?

編集:詳細

送信と受信の両方を制御し、ハードコードされた文字列を一方向に正常に転送しました。

受信側は次のとおりです。

    Dim author As String
    Dim title As String

    Dim xDoc As New XmlDocument
    Dim xAuthor As XmlElement
    Dim xTitle As XmlElement

    xDoc.LoadXml(xml)
    xAuthor = xDoc.FirstChild.Item("author")
    xTitle = xDoc.FirstChild.Item("title")

    author = xAuthor.FirstChild.Value
    title = xTitle.FirstChild.Value

    ShowMessage(author, title)

ほとんどの場合、これは XML の使用方法を学習する演習であるため、自分の知識以外に本当の目的はありません。そのようなことを行う最善の方法について、いくつかの意見を探していました。

4

4 に答える 4

4

XmlDocument.Loadメソッドを使用すると、ストリーム、TextReader、URL、または XmlReader の 4 つのオプションがあります。

NetworkStreamクラスを使用して、ネットワークを経由できます。XML を Web サイトに投稿し、URL オプションを介してダウンロードすることができます。転送を行うプロトコルをより具体的にしたい場合があります。

たとえば、ストリームに書き込むには、ストリームの XmlWriter.Create オーバーロードを使用します。XmlWriterSettings オブジェクトを使用してインデントを提供します。

   Dim settings As XmlWriterSettings = New XmlWriterSettings()
   settings.Indent = true
   settings.IndentChars = (ControlChars.Tab)
   settings.OmitXmlDeclaration = true

   Dim myNetworkStream As New NetworkStream(mySocket) 'mySocket is a whole other code sample

   ' Create the XmlWriter object and write some content.
   writer = XmlWriter.Create(myNetworkStream, settings)
   XmlDocument.WriteTo(writer)

xml ドキュメントを作成する [古い方法] は非常に面倒でした。VB9 の XML リテラルを検討することをお勧めします。ただし、.NET 2 スタイルの XmlDocument 操作の例を次に示します。

    Dim doc As New XmlDocument()
    Dim root As XmlElement = doc.CreateElement("xml")
    Dim author As XmlElement = doc.CreateElement("author")
    author.Value = "Joe the magnificent"
    Dim title As XmlElement = doc.CreateElement("title")
    title.Value = "Joe goes home"

    root.AppendChild(author)
    root.AppendChild(title)
    doc.AppendChild(root)
于 2008-11-05T03:32:52.477 に答える
3

これが私がやったことです:

Public Function FormatMessage(ByVal author As String, ByVal title As String, ByVal genre As String) As String
Dim xDoc As New XmlDocument

' Create outer XML
Dim xNode As XmlNode = xDoc.AppendChild(xDoc.CreateElement("xml"))

' Create Author Node
Dim xAuthor As XmlNode = xNode.AppendChild(xDoc.CreateElement("author"))
xAuthor.InnerText = author

' Create Message Node
Dim xTitle As XmlNode = xNode.AppendChild(xDoc.CreateElement("message"))
xtitle.InnerText = title

' Create Genre Node
Dim xGenre As XmlNode = xNode.AppendChild(xDoc.CreateElement("genre"))
xGenre.InnerText = genre

' Create StringWriter to convert XMLDoc to string
Dim xWriter As New IO.StringWriter()
Dim xml_writer As New XmlTextWriter(xWriter)
xDoc.WriteContentTo(xml_writer)
Return xWriter.ToString

End Function

この関数は、入力値に基づいて xml 文字列を作成し、xml 文字列を元の値に分解するために、次のコードを使用しました。

Dim author As String
Dim title As String
Dim genre As String

Dim xDoc As New XmlDocument
Dim xAuthor As XmlElement
Dim xTitle As XmlElement
Dim xGenre as XmlElement

xDoc.LoadXml(xml)
If xDoc.DocumentElement.Name = "xml" Then
    xAuthor = xDoc.FirstChild.Item("author")
    xTitle = xDoc.FirstChild.Item("title")

    author = xAuthor.FirstChild.Value
    title = xTitle.FirstChild.Value
    genre = xGenre.FirstChild.Value
End If

ShowMessage(author, title, genre)

助けてくれてありがとう!KJ

于 2008-11-12T12:37:57.897 に答える
1

これがあなたが探しているものかどうかはわかりませんが、最新バージョンの VB と .NET を使用している場合は、xml リテラルと LINQ を使用して xml を解析できるはずです。

Sub Send()
    Dim myxml = <xml>
                   <author>Joe the Magnificent</author>
                   <title>Joe Goes Home</title>
                </xml>
Readxml(myxml)
End Sub

Sub Readxml(myxml as XDocument)
Dim Data = From xml in myxml...<xml> _
           Select New With {.Author = xml.<author>.value, _
                            .title = xml.<title>.value}

For each item in Data
    ShowMessage(item.Author,Item.Title)
Next
End Sub

上記は単なるエアコードであるため、実行されない可能性があることに注意してください。私のコンピューターでは実行できないため、テストできません。

于 2008-11-05T03:35:52.563 に答える