在vb.net中读取XML文件的逻辑

时间:2016-06-10 14:30:04

标签: xml vb.net if-statement reader

我有一个XML文件,我正在尝试使用vb.net读取并重写(以便以后操作)到新的文本文件。

我能够成功读取XML并将其打印出来,但是我在使用每个元素/属性的开始和结束标记正确时遇到了问题。

我正在使用' xmlNodeReader'通过获取每个读取的名称和值来阅读文档。 然后是xmlNodeType.ElementxmlNodeType.EndElement

的精选案例

如何获得正确的逻辑来解决此问题,因为某些XML行的格式为<Server Type="PropertyDefinitions">,其他格式的格式为<Server Type="aServerName"/>

我已经为endEntity尝试了一个if循环,但似乎都没有。这是我的代码的一部分,它显示了读写函数。 如果我还没有提供足够的信息,请告诉我。

     Dim reader As XmlNodeReader = New XmlNodeReader(document)
     Dim result As New StringBuilder
      While reader.Read
        Select Case reader.NodeType

            Case XmlNodeType.Element
            result.Append("<" & reader.Name)

                    If reader.HasAttributes Then
                        While reader.MoveToNextAttribute()
                            result.Append(" " + reader.Name + "=" + Chr(34) + reader.Value + Chr(34))
                        End While

                        If XmlNodeType.EndEntity Then
                            result.Append("/>")
                        End If
                    Else
                        If XmlNodeType.Entity Then
                            result.Append(">")
                        ElseIf XmlNodeType.EndEntity Then
                            result.Append("/>")
                        End If
                    End If

            Case XmlNodeType.EndElement
                result.Append("</" + reader.Name + ">")

        End Select
    End While

显示3种不同类型标记的XML示例:

    <DocumentSMG Version="6.900000" VersionSeemage="6.12.0.2428">
     <Server Type="PropertyDefinitions">
        <MetaProperties>
        </MetaProperties>
     </Server>
      <Server Type="aServerType1">
        <BOM.Sort.Ascendant Value="1"/>
     </Server>
      <Server Type="aServerType2"/>
      <Server Type="aServerType3"/>
    </DocumentSMG>

2 个答案:

答案 0 :(得分:0)

我建议您尝试使用XDocument类和Linq。使用此XML(XMLFile.xml):

<?xml version="1.0" encoding="utf-8" ?>
<DocumentSMG Version="6.900000" VersionSeemage="6.12.0.2428">
  <Server Type="PropertyDefinitions">
    <MetaProperties>
    </MetaProperties>
  </Server>
  <Server Type="aServerType1">
    <BOM.Sort.Ascendant Value="1"/>
  </Server>
  <Server Type="aServerType2"/>
  <Server Type="aServerType3"/>
</DocumentSMG>

你可以这样阅读文件:

Dim xml = XDocument.Load("XMLFile.xml")

现在我不确定您要从文件中提取的确切内容,但是我们假设您只想要特定类型的服务器节点:

Dim serverNodes = xml...<Server>.Where(Function(node) node.@Type = "aServerType1")

...是Descendants属性的别名 @表示属性

因此,上面查找作为文档根的后代的节点,其Type属性包含&#34; aServerType1&#34;。

您也可以直接在XDocument中修改值,然后保存它。

保存文件:

xml.Save("NewXMLFile.xml")

答案 1 :(得分:0)

试试这个

Imports System.Xml
Imports System.Xml.Linq
Module Module1
    Const FILENAME As String = "c:\temp\test.xml"
    Sub Main()
        Dim reader As XmlReader = XmlReader.Create(FILENAME)

        While Not reader.EOF
            If reader.Name <> "Server" Then
                reader.ReadToFollowing("Server")
            End If
            If Not reader.EOF Then
                Dim server As XElement = XElement.ReadFrom(reader)
                Dim type As String = server.Attribute("Type")
                Select Case type
                    Case "PropertyDefinitions"

                    Case "aServerType1"

                    Case "aServerType2"

                    Case "aServerType3"

                End Select

            End If

        End While



    End Sub

End Module