我有一个XML文件,想将其转换为VB net中可用的类。
我不知道如何循环遍历xml以创建一个MyMaterial列表。目前,我正在使用StringReader逐行检查条件,以便创建此列表。使用vb.net的xml工具一定有更有效的方法。 解决方案 根据以下帮助,这是适合我的解决方案。
<?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以创建一个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
XDocument
类加载您的文件。 - Chris Dunaway