Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用VB.net解析XML_Xml_Vb.net - Fatal编程技术网

如何用VB.net解析XML

如何用VB.net解析XML,xml,vb.net,Xml,Vb.net,我有一个XML文件,我想将其转换为一个类,以便在VB net中使用 <?xml version="1.0" encoding="windows-1252"?> <MatML_Doc> <Material> <BulkDetails> <Name>23133385</Name> <Class> <Name>

我有一个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>
...
我不知道如何循环使用xml来创建(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

您可以使用LINQtoXML来读取和操作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
Private-Sub-ReadXml()
Dim xmall=
23133385
1-碳钢
各向同性材料
7.87e-6
美国汽车工程师协会
J1199
类别9.8
23133419
1-碳钢
各向同性材料
7.87e-6
EN
10130
DC05
对于xmlAll.Elements中的每个像素
Dim材质作为新材质
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”和d.Attribute(“property”).Value=“material Type”).Value
“Ect
下一个
端接头

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

这个问题的答案更多的是:如何解析Xml文件以在VB.net中创建类。

通过使用xsd.exe工具,可以将XML文件中的类自动生成到VB,xsd.exe工具是Visual Studio中开发工具的一部分

您需要打开Dev命令提示符来运行该工具。

VS 2013命令提示符的默认位置为,但这可能会根据安装位置而更改

在命令提示符下运行以下命令:

xsd'yourfilename'.xml/classes/language:vb

例如: 这将在目录文件夹中自动生成XML方案文件“yourfilename”.xsd

然后运行以下命令:

xsd'yourfilename'.xsd/classes/language:vb

例如: 这将从XSD文件自动生成一个VB类,XSD文件将包含在名为“yourfilename.VB”的VB文件中

然后,您可以简单地将VB文件和类一起添加到项目中


一旦将此类添加到项目中,就可以轻松地在类的节点之间循环

将其指向实际xml文件的正确方式是什么?我尝试加载XMLDocument类型,但未找到成员的错误。@Todd-使用
XDocument
类加载文件。
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