1

Once again having issues parsing XML. I've got almost all of it figured out but am stuck where I have multiple nodes with the same name. Here's a snippet from the XML

<HotelDetailsRsp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TraceId="0.7055475" TransactionId="72CEA41F0A0758AA26AA4A14D780FC06" ResponseTime="1069">
  <RequestedHotelDetails xmlns="http://www.travelport.com/schema/hotel_v19_0">
    <HotelProperty HotelChain="LC" HotelCode="14645" HotelLocation="BOM" Name="ITC GRAND CENTRAL MUMBAI">
      <PropertyAddress>
        <Address>Dr Babasaheb Ambedkar Road</Address>
        <Address>Mumbai 400012 IN</Address>
        <Address>Parel</Address>
      </PropertyAddress>
      <PhoneNumber xmlns="http://www.travelport.com/schema/common_v17_0" Type="Business" Number="91 22-24101010"/>
      <PhoneNumber xmlns="http://www.travelport.com/schema/common_v17_0" Type="Fax" Number="91 22-24101111"/>
      <Distance xmlns="http://www.travelport.com/schema/common_v17_0" Value="6" Direction="S"/>
    </HotelProperty>
  </RequestedHotelDetails>
</HotelDetailsRsp>

And this is the VB.NET code I'm using to parse it with

For Each n As XElement In _xDoc.Descendants(_ns + "HotelProperty")
    _hotelProperty.Add(New HotelProperty With { _
                   .HotelChain = n.Attribute("HotelChain").Value, _
                   .HotelCode = n.Attribute("HotelCode").Value, _
                  .HotelLocation = n.Attribute("HotelLocation").Value, _
                  .HotelName = n.Attribute("Name").Value, _
                  .Address = n.Descendants(_ns + "PropertyAddress").Select(Function(el As String) el).ToList(), _
                  .PhoneNumber = n.Descendants(_ns + "PhoneNumber").Where(Function(e) e.Attribute("Type") = "Bunsiness").Value, _
                  .FaxNumber = n.Descendants(_ns + "PhoneNumber").Where(Function(e) e.Attribute("Type") = "Fax").Value})
Next

All values are populated when I test it except PhoneNumber and FaxNumber. How would I go about accomplishing this? Thanks

2 Answers 2

2

Two things which are immediately obvious to me:

Function(e) e.Attribute("Type") = "Bunsiness"

should be

Function(e) e.Attribute("Type") = "Business"

And _ns + "PhoneNumber" should be _ns17 + "PhoneNumber", where _ns17 points to the namespace http://www.travelport.com/schema/common_v17_0 instead of http://www.travelport.com/schema/hotel_v19_0

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

1 Comment

Made those changes and it went from returning Nothing to returning empty strings for the phone & fax numbers. Something tells me it's in the Function(e) e.Attribute = "Business" part but I cant quite put my finger on it
1
  1. PhoneNumber elements have difference namespace

    Dim _ns2 = XNamespace.Get("http://www.travelport.com/schema/common_v17_0")
    
  2. The number your looking for is not the value of element, it's stored in Number attribute

    .PhoneNumber = n.Descendants(_ns2 + "PhoneNumber").First(Function(e) e.Attribute("Type") = "Business").Attribute("Number").Value, _
    .FaxNumber = n.Descendants(_ns2 + "PhoneNumber").First(Function(e) e.Attribute("Type") = "Fax").Attribute("Number").Value
    

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.