我在VB项目中第一次使用XML。我一直在研究这个查询3个小时并阅读它,但我没有运气,我认为我真的不明白具体的术语,以使这个查询与我的文档一起正常工作。
问题是我一直没有返回并导致崩溃。我现在已经把代码弄得太乱了,它可能比我写的原始数据要少,但你应该能够获得要点,看到任何有XML经验的人都可能会感到痛苦!这只是我的偏好的一部分,它为不同版本的Access存储了正确的提供程序,并允许用户在程序交付后添加更多版本。这是代码,它的价值。
在这里,我想找到'string'的值,其中版本的'name'等于“Access 2010”的测试值
Dim xml As XDocument = XDocument.Load("preferences.xml")
Dim query = From xe In xml.Descendants("Accessversion")
Where xe.Element("Version").Attribute("Name") = "Access 2010"
Select xe.Element("string").Value
这是XML文档的相关部分:
<Preferences>
<AccessVersion>
<Version>
<Name>Access 97</Name>
<string>Provider=Microsoft.Jet.OLEDB.4.0</string>
</Version>
<Version>
<Name>Access 2000</Name>
<string>Provider=Microsoft.Jet.OLEDB.4.0</string>
</Version>
<Version>
<Name>Access 2002</Name>
<string>Provider=Microsoft.Jet.OLEDB.4.0</string>
</Version>
<Version>
<Name>Access 2003</Name>
<string>Provider=Microsoft.Jet.OLEDB.4.0</string>
</Version>
<Version>
<Name>Access 2007</Name>
<string>Provider=Microsoft.ACE.OLEDB.12.0</string>
</Version>
<Version>
<Name>Access 2010</Name>
<string>"Provider=Microsoft.ACE.OLEDB.12.0"</string>
</Version>
<Version>
<Name>Access 2013</Name>
<string>Provider=Microsoft.ACE.OLEDB.12.0</string>
</Version>
</AccessVersion>
同样,我意识到这可能不是应用XML的最佳方式,但我必须在大约一个小时内学习这个项目的一部分。你可能会说,我对编程非常陌生,项目的其余部分已经很好了,但这真让我难过!
答案 0 :(得分:0)
Dim xml As XDocument = XDocument.Load("preferences.xml")
Dim query = From xe In xml.Descendants("Version")
Where xe.Element("Name").Value = "Access 2010"
Select xe.Element("string").Value
答案 1 :(得分:0)
为了明确您的查询有什么问题,以下是您的方法的正确版本:
Dim query = From xe In xml.Descendants("Accessversion")
Where xe.Element("Version").Element("Name").Value = "Access 2010"
Select xe.Element("Version").Element("string").Value
请注意,.Descendants
将搜索当前代码下的所有元素。并且.Element
将仅搜索当前元素的直接子元素。请注意,在这种情况下xe
是<Accessversion>
标记。
但无论如何,@ Iomed的答案是更好/更简单的方法