0

I'm trying to make sense of a big data dump of XML that I need to write to a database using some VB.net code. I'm looking for some help getting started with the parsing code, specifically how to access the attribute values.

                  <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>

Basically I want to find a property within the xml file that has a certain property ID. So it would be something like the code listed below which is my interpretation of what it should be. The code doesn't work, so I'm going wrong somewhere with it.

This is the relevant line that I need to be able to access:

<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()
1
  • I'm able to find an individual node using the code below, but I need to figure a way to traverse the attribute values so I can read them into an object. Dim productsXML As XElement = XElement.Load(XMLFile) Dim ParentNode As XElement Dim ChildNode As XElement Dim Query = From p In productsXML...<Value> _ Where p.Value = "PROPERTY_ID" ParentNode = Query.FirstOrDefault() Commented Apr 6, 2010 at 20:10

3 Answers 3

1

For parsing XML with VB.Net you need to use the System.XML namespace. This has all the tools you need to pass the XML in your question.

To query attributes, the following code will work (where xNode is an XmlNode object)

xNode.Attributes(attributeName).Value.ToString

If the attribute does not exist you will get Nothingreturned

The following looks like a nice tutorial

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

Sign up to request clarification or add additional context in comments.

Comments

0

Maybe you could solve this with 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)

Comments

0

Glad to see you're able to use the Linq to XML features in your query. It will make this much easier. Building on what you had, here is something that may do what you're asking:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.