如何使用VB .net解析XML

托德

我有一个XML文件,我想将其转换为VB net中使用的类。

<?xml version="1.0" encoding="windows-1252"?>
<MatML_Doc>
  <Material>
        <BulkDetails>
            <Name>23133385</Name>
            <Class>
                <Name>1 - Carbon Steel</Name>
            </Class>
            <Source source=""/>
            <PropertyData property="Material Type">
                <Data format="string">IsotropicMaterial</Data>
            </PropertyData>
            <PropertyData property="Mass Density (RHO)_1">
                <Data format="exponential">7.87e-6</Data>
            </PropertyData>
            <PropertyData property="Spec Organization">
                <Data format="string">SAE</Data>
            </PropertyData>
            <PropertyData property="Spec Name">
                <Data format="string">J1199</Data>
            </PropertyData>
            <PropertyData property="Spec Grade">
                <Data format="string">CLASS 9.8</Data>
            </PropertyData>
        </BulkDetails>
    </Material>
    <Material>
        <BulkDetails>
            <Name>23133419</Name>
            <Class>
                <Name>1 - Carbon Steel</Name>
            </Class>
            <Source source=""/>
            <PropertyData property="Material Type">
                <Data format="string">IsotropicMaterial</Data>
            </PropertyData>
            <PropertyData property="Mass Density (RHO)_1">
                <Data format="exponential">7.87e-6</Data>
            </PropertyData>
            <PropertyData property="Spec Organization">
                <Data format="string">EN</Data>
            </PropertyData>
            <PropertyData property="Spec Name">
                <Data format="string">10130</Data>
            </PropertyData>
            <PropertyData property="Spec Grade">
                <Data format="string">DC05</Data>
            </PropertyData>
        </BulkDetails>
    </Material>
...

我正在尝试将其转换为自定义类的列表:

Public Class MyMaterial
    Public Name As String
    Public Class As String
    Public Org As String
    Public Spec As String
    Public Grade As String
    Public Density As Double
End Class

我迷路于如何遍历xml以创建List(of MyMaterial)。目前,我正在使用stringreader一次运行条件检查以创建此列表,并通过一行。使用vb.net xml工具必须有一种更有效的方法。

解决方案

使用下面的帮助,这是对我有用的解决方案。

Dim doc As XDocument = XDocument.Load(XMLLocation)
            Dim XMLMaterials As IEnumerable(Of XElement) = doc.Root.Elements("Material")
            For Each XEL1 As XElement In XMLMaterials
                Dim material As New MyMaterial
                material.Name = XEL1.Element("BulkDetails").Element("Name").Value
                material.Category = XEL1.Element("BulkDetails").Element("Class").Element("Name").Value
                For Each XEL2 As XElement In XEL1.Element("BulkDetails").Elements.Where(Function(d) d.Name = "PropertyData")
                    If XEL2.Attribute("property").Value = "Mass Density (RHO)_1" Then
                        material.Density = XEL2.Value
                    ElseIf XEL2.Attribute("property").Value = "Spec Organization" Then
                        material.Org = XEL2.Value
                    ElseIf XEL2.Attribute("property").Value = "Spec Name" Then
                        material.Spec = XEL2.Value
                    ElseIf XEL2.Attribute("property").Value = "Spec Grade" Then
                        material.Grade = XEL2.Value
                    End If
                Next
                MaterialsList.Add(material)
                If Not CatagoryNames.Contains(material.Category) Then CatagoryNames.Add(material.Category)
                If Not Organizations.Contains(material.Org) Then Organizations.Add(material.Org)
            Next
Shukri Gashi

您可以使用linq to xml来读取和操作xml。为了遍历所有元素,您应该使用递归代码。

Private Sub ReadXml()
    Dim xmlAll = <?xml version="1.0" encoding="windows-1252"?>
                 <MatML_Doc>
                     <Material>
                         <BulkDetails>
                             <Name>23133385</Name>
                             <Class>
                                 <Name>1 - Carbon Steel</Name>
                             </Class>
                             <Source source=""/>
                             <PropertyData property="Material Type">
                                 <Data format="string">IsotropicMaterial</Data>
                             </PropertyData>
                             <PropertyData Property="Mass Density (RHO)_1">
                                 <Data format="exponential">7.87e-6</Data>
                             </PropertyData>
                             <PropertyData Property="Spec Organization">
                                 <Data format="string">SAE</Data>
                             </PropertyData>
                             <PropertyData Property="Spec Name">
                                 <Data format="string">J1199</Data>
                             </PropertyData>
                             <PropertyData Property="Spec Grade">
                                 <Data format="string">CLASS 9.8</Data>
                             </PropertyData>
                         </BulkDetails>
                     </Material>
                     <Material>
                         <BulkDetails>
                             <Name>23133419</Name>
                             <Class>
                                 <Name>1 - Carbon Steel</Name>
                             </Class>
                             <Source source=""/>
                             <PropertyData property="Material Type">
                                 <Data format="string">IsotropicMaterial</Data>
                             </PropertyData>
                             <PropertyData Property="Mass Density (RHO)_1">
                                 <Data format="exponential">7.87e-6</Data>
                             </PropertyData>
                             <PropertyData Property="Spec Organization">
                                 <Data format="string">EN</Data>
                             </PropertyData>
                             <PropertyData Property="Spec Name">
                                 <Data format="string">10130</Data>
                             </PropertyData>
                             <PropertyData Property="Spec Grade">
                                 <Data format="string">DC05</Data>
                             </PropertyData>
                         </BulkDetails>
                     </Material>
                 </MatML_Doc>

    For Each xel In xmlAll.Elements
        Dim material As New MyMaterial
        material.Name = xel.Element("BulkDetails").Element("Name").Value
        material.Classe = xel.Element("BulkDetails").Element("Classe").Element("Name").Value
        material.Org = xel.Element("BulkDetails").Elements.Where(Function(d) d.Name = "PropertyData" And d.Attribute("property").Value = "Material Type").Value
        'Ect
    Next

End Sub

也有将Xml序列化为类的序列化库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在VB.NET中解析复杂的XML

来自分类Dev

VB.NET从内联架构解析XML别名

来自分类Dev

如何使用VB.NET删除文件?

来自分类Dev

使用VB.NET解析具有相同名称的节点的XML文件

来自分类Dev

使用VB脚本解析XML

来自分类Dev

如何获得<?使用vb.net从xml标记

来自分类Dev

如何使用jaxb解析xml

来自分类Dev

用Json解析而不用XML解析。VB.Net

来自分类Dev

如何在VB.net中使用分号解析特定元素

来自分类Dev

如何使用VB.NET使用解码编码的URL

来自分类Dev

VB.Net XML解析问题

来自分类Dev

如何防止.NET XML解析器扩展XML中的参数实体?

来自分类Dev

如何在vb.net中使用XML节点的if条件

来自分类Dev

在VB .Net中解析XML

来自分类Dev

如何使用VB.NET删除文件?

来自分类Dev

如何使用vb.net添加xml文件头

来自分类Dev

使用VB脚本解析XML

来自分类Dev

如何使用VB.Net在datagridview中使用CellEndEdit事件?

来自分类Dev

如何使用jaxb解析xml

来自分类Dev

用Json解析而不用XML解析。VB.Net

来自分类Dev

如何使用vb.net从xml文件创建Excel工作表

来自分类Dev

如何防止.NET XML解析器扩展XML中的参数实体?

来自分类Dev

如何使用VB.NET编辑XML文件

来自分类Dev

如何使用条件解析XML?

来自分类Dev

如何使用VB.net计算XML中具有相同属性值的节点总数

来自分类Dev

如何使用VB.NET从XML获取属性值?

来自分类Dev

VB.net如何使用xml创建表格并在网页上显示表格

来自分类Dev

如何使用“Newtonsoft”在VB.NET中解析没有对象的Json

来自分类Dev

使用 VB.NET 读取 XML 文件