2010-04-02 2 views
0

Я пытаюсь понять большой дамп данных XML, который мне нужно записать в базу данных, используя некоторый код VB.net. Я ищу некоторую помощь при запуске с кодом разбора, в частности, как получить доступ к значениям атрибутов.Анализ 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() 
+0

Я могу найти индивидуальный узел, используя приведенный ниже код, но мне нужно найти способ, чтобы пересечь значения атрибутов поэтому я могу прочитать их в объекте. Dim productsXML Как XElement = XElement.Load (XMLFILE) Dim ParentNode As XElement Dim ChildNode As XElement Dim Query = С р В productsXML ... _ Где p.Value = "PROPERTY_ID" ParentNode = Query. FirstOrDefault() – SuperFurryToad

ответ

1

Для разбора 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

Может быть, вы Коула d решить это с помощью 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) 
0

Рад видеть, что вы можете использовать функции 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 
Смежные вопросы