Разбор XML с VB.net - PullRequest
       1

Разбор XML с VB.net

0 голосов
/ 03 апреля 2010

Я пытаюсь понять большой дамп данных XML, который мне нужно записать в базу данных, используя некоторый код VB.net. Мне нужна помощь для начала работы с кодом анализа, в частности, как получить доступ к значениям атрибутов.

                  <Product ID="523233" UserTypeID="Property" ParentID="523232">
                <Name>My Property Name</Name>                     
                <AssetCrossReference AssetID="173501" Type=" Non Print old">
                  </AssetCrossReference>
                  <AssetCrossReference AssetID="554740" Type=" Non Print old">
                  </AssetCrossReference>
                  <AssetCrossReference AssetID="566495" Type=" Non Print old">
                  </AssetCrossReference>
                  <AssetCrossReference AssetID="553014" Type="Non Print">
                  </AssetCrossReference>
                  <AssetCrossReference AssetID="553015" Type="Non Print">
                  </AssetCrossReference>
                  <AssetCrossReference AssetID="553016" Type="Non Print">
                  </AssetCrossReference>
                  <AssetCrossReference AssetID="553017" Type="Non Print">
                  </AssetCrossReference>
                  <AssetCrossReference AssetID="553018" Type="Non Print">
                  </AssetCrossReference>

                <Values>
                  <Value AttributeID="5115">Section of main pool</Value>
                  <Value AttributeID="5137">114 apartments, four floors, no lifts</Value>
                  <Value AttributeID="5170">Property location</Value>
                  <Value AttributeID="5164">2 key</Value>
                  <Value AttributeID="5134">A comfortable property, the apartment is set on a pine-covered hillside - a scenic and peaceful location.</Value>
                  <Value AttributeID="5200">PROPERTY_ID</Value>
                  <Value AttributeID="5148">facilities include X,Y,Z</Value>
                  <Value AttributeID="5067">Self Catering. </Value>
                  <Value AttributeID="5221">Frequent organised daytime activities</Value>
                </Values>
              </Product>
            </Product>

По сути, я хочу найти свойство в файле XML с определенным идентификатором свойства. Таким образом, это будет что-то вроде приведенного ниже кода, который является моей интерпретацией того, каким он должен быть. Код не работает, поэтому я где-то ошибаюсь.

Это соответствующая строка, к которой мне нужно иметь доступ:

<Value AttributeID="5200">PROPERTY_ID</Value>


Dim productsXML As XElement = XElement.Load("C:\myFile.xml")

Dim foundNode As XElement

Dim query = From p In productsXML.Elements("Product").Descendants("Values") Where p.Attributes("attribute").ToString = "PROPERTY_ID"

foundNode = query.FirstOrDefault()

Ответы [ 3 ]

1 голос
/ 03 апреля 2010

Для анализа XML с помощью VB.Net вам необходимо использовать пространство имен System.XML. Здесь есть все инструменты, необходимые для передачи XML в вашем вопросе.

Для запроса атрибутов будет работать следующий код (где xNode - это XmlNode объект)

xNode.Attributes(attributeName).Value.ToString

Если атрибут не существует, вы получите Nothing возвращено

Следующее выглядит как хороший учебник

http://www.beansoftware.com/ASP.NET-Tutorials/XML-Programming-VB.NET.aspx

0 голосов
/ 19 июля 2010

Рад, что вы можете использовать функции Linq to XML в своем запросе. Это сделает это намного проще. Основываясь на том, что у вас было, вот что может сделать то, что вы просите:

Dim rootEl As XElement = XDocument.Load("C:\myFile.xml").Root
Dim propertyEl = (From p In rootEl.Descendants("Product") Where p.Attributes("ID").Value = "PROPERTY_ID").FirstOrDefault()
' Now that you have the property element, you can query it.
Dim query = From p In propertyEl Where p.Descendants("Value").Attribute("AttributeID").Value = "ATTR_ID")
' Or just loop through it
For Each el As XElement In propertyEl.Descendants("Value")
   'Do something
Next
0 голосов
/ 04 апреля 2010

Может быть, вы могли бы решить эту проблему с XPath

Dim document As XPathDocument = New XPathDocument("products.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

Dim node As XPathNavigator = navigator.SelectSingleNode("//Product/Values/Value[@AttributeID='your id']")
Console.WriteLine(node.InnerXml)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...