在 vb.net 中读取 XML 文件的逻辑
Logic to reading an XML file in vb.net
我有一个 XML 文件,我正在尝试使用 vb.net.
读取并重写(以便以后操作)到一个新的文本文件
我能够成功读取 XML 并将其打印出来,但是我在获取每个 element/attribute.
的开始和结束标签时遇到了问题
我正在使用 'xmlNodeReader' 通过获取每次读取的名称和值来读取文档。
然后 select 案例 xmlNodeType.Element
或 xmlNodeType.EndElement
如何获得正确的逻辑来解决这个问题,因为一些 XML 行的形式为 <Server Type="PropertyDefinitions">
而其他行的形式为 <Server Type="aServerName"/>
我试过 endEntity
的 if 循环等等,但 none 似乎有效。这是我的(部分)代码,它显示了读写功能。
如果我没有提供足够的信息,请告诉我。
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>
我建议您改为尝试使用 XDocument class 和 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 属性 的别名
@表示一个属性
因此上面的代码查找文档根的后代节点,其类型属性包含 "aServerType1"。
您也可以直接在XDocument中修改数值,然后保存。
要保存文档:
xml.Save("NewXMLFile.xml")
试试这个
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
我有一个 XML 文件,我正在尝试使用 vb.net.
读取并重写(以便以后操作)到一个新的文本文件我能够成功读取 XML 并将其打印出来,但是我在获取每个 element/attribute.
的开始和结束标签时遇到了问题我正在使用 'xmlNodeReader' 通过获取每次读取的名称和值来读取文档。
然后 select 案例 xmlNodeType.Element
或 xmlNodeType.EndElement
如何获得正确的逻辑来解决这个问题,因为一些 XML 行的形式为 <Server Type="PropertyDefinitions">
而其他行的形式为 <Server Type="aServerName"/>
我试过 endEntity
的 if 循环等等,但 none 似乎有效。这是我的(部分)代码,它显示了读写功能。
如果我没有提供足够的信息,请告诉我。
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>
我建议您改为尝试使用 XDocument class 和 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 属性 的别名 @表示一个属性
因此上面的代码查找文档根的后代节点,其类型属性包含 "aServerType1"。
您也可以直接在XDocument中修改数值,然后保存。
要保存文档:
xml.Save("NewXMLFile.xml")
试试这个
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