xml - xml to linq,如何修复后期绑定?
问题描述
我在 xml 文件中搜索特定元素,我想出了一个可以找到我需要的元素的解决方案,但是,如果我要打开 Option Strict,编译器会告诉我它不允许后期绑定。在 Internet 上进行的快速搜索使我发现绑定需要在执行之前初始化为类型,只是不确定如何去做。
我可以简单地关闭该选项,但为了更好的编码,我想将其保留,看看如何避免后期绑定。老实说,我什至不确定从哪里开始,我需要一个具有自己属性的类吗?
Dim xmlDocument As String = "C:\***\comp.xml" ' Path '
Dim xelement As XDocument = XDocument.Load(xmlDocument)
Console.WriteLine("What company are you searching for? ")
searchCompData = Console.ReadLine()
Dim results As IEnumerable(Of Object) = From c In xelement.Descendants("COMPANYINFO").Descendants("Office")
Where CType(c.Parent.Parent.Element("compId"), String) = searchCompData
Select New With
{
.reg = c.Parent.Element("Region"),
.city = c.Parent.Element("City"),
.ceo = c.Parent.Element("CEO"),
.office = c
}
For Each res As Object In results
Console.WriteLine(res.reg)
Console.WriteLine(res.city)
Console.WriteLine(res.ceo)
Console.WriteLine(res.office)
Next
Console.ReadLine()
我的示例 xml 文件
<?xml version="1.0" encoding="utf-8"?>
<CompType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CompanyRegion>
<compId>1</compId>
<compRegionId>654</compRegionId>
<compTransPort>Van</compTransPort>
<COMPANYINFO>
<compInfoId>545</compInfoId>
<City>London</City>
<Zip>3214</Zip>
<Zone>535</Zone>
<Region>London Region</Region>
<LocalNumber>54687874</LocalNumber>
<CEO>Alice Goldsmith</CEO>
<CompanyStreet>BongoBingo St</CompanyStreet>
<Office>
<Name>IT</Name>
<Place>2nd Floor</Place>
<Manager>
<Name>Steven Smith</Name>
<Address>Robo Street</Address>
<Phonenumber>12345</Phonenumber>
</Manager>
</Office>
<Office>
<Name>Accountants</Name>
<Place>3d Floor</Place>
<Manager>
<Name>Joana Petersen</Name>
<Address>Lamba Street</Address>
<Phonenumber>54321</Phonenumber>
</Manager>
</Office>
</COMPANYINFO>
</CompanyRegion>
<CompanyRegion>
<compId>2</compId>
<compRegionId>785</compRegionId>
<compTransPort>Truck</compTransPort>
<COMPANYINFO>
<compInfoId>321</compInfoId>
<City>Oslo</City>
<Zip>4598</Zip>
<Zone />
<Region>Oslo Region</Region>
<LocalNumber>458754121</LocalNumber>
<CEO>Michael Jonson</CEO>
<CompanyStreet>BingoBango St</CompanyStreet>
<Office>
<Name>Sales</Name>
<Place>4th Floor</Place>
<Manager>
<Name>Rachel Laurensen</Name>
<Address>Albo Street</Address>
<Phonenumber>55555</Phonenumber>
</Manager>
</Office>
<Office>
<Name>Accountants</Name>
<Place>1st Floor</Place>
<Manager>
<Name>Peter Carlsen</Name>
<Address>Lobo Street</Address>
<Phonenumber>455656</Phonenumber>
</Manager>
</Office>
</COMPANYINFO>
</CompanyRegion>
</CompType>
解决方案
As IEnumerable(Of Object)
可以为要推断的匿名类型删除,并且.Value
是获取元素值所必需的。此外,VB.Net XML 轴属性可用于简化查询:
Dim results = From c In xelement...<CompanyRegion>
Where c.<compId>.Value = searchCompData
Select New With {
.reg = c...<Region>.Value,
.city = c...<City>.Value,
.ceo = c...<CEO>.Value,
.office = c...<Office>
}
推荐阅读
- autodesk - 从十进制类型单位到建筑
- amazon-web-services - AWS ALB 运行状况检查失败
- windows-server - 尝试在 Windows Server 2016 上修改 com+ 对象会引发错误
- angular - 无法在 document.getelementbyclass 中使用 title 属性。错误标题属性不存在
- reactjs - react antd输入defaultValue不显示
- c# - 命名空间与它所在的项目同名是最佳实践吗?
- amazon-web-services - 将多个 ebs 卷附加到每个 ec2 实例
- react-native - React Native Android:在项目中使用新的 debug.keystore
- c# - 无法构建备份 WPF 项目
- django-templates - Django:如何从 Django 模板中的 label_tag 中删除“:”?