2014-01-07 3 views
0

Я впервые работаю с XML в проекте VB. Я работаю над этим запросом в течение 3 часов и читаю на нем, но мне не повезло, я не думаю, что действительно понимаю конкретную терминологию, чтобы этот запрос работал правильно с моим документом.Проблема с запросом XML-документа в VB

Проблема в том, что я не возвращаю ничего и вызывают крушение. Я перепутал с кодом так много сейчас, и он, вероятно, работает меньше, чем исходный бит, который я написал, но вы должны иметь возможность получить суть, это, вероятно, больно видеть для любого, у кого есть опыт XML! Это лишь часть моих предпочтений, в которых хранится правильный поставщик для разных версий Access и позволяет добавлять дополнительные версии пользователем после того, как программа была доставлена. Вот код, для чего он стоит.

Здесь я хотел найти значение «строки», где «имя» от версии равно испытываемого значения «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
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 
+0

Большое спасибо, что только что спас меня массивную головную боль! Все о ситаксе! – user3168939

+0

plz, принимаем на себя ответ. – dovid

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 является лучше/простой подход

Смежные вопросы