0

I am trying to read the following XML with C#

 <GetAssetWarrantyResponse xmlns="http://tempuri.org/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <GetAssetWarrantyResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://schemas.datacontract.org/2004/07/Dell.AWR.Domain.Asset">
        <a:Faults />
        <a:Response>
            <a:DellAsset>
                <a:AssetParts i:nil="true" />
                <a:CountryLookupCode>XXXX</a:CountryLookupCode>
                <a:CustomerNumber>XXXXXX</a:CustomerNumber>
                <a:IsDuplicate>false</a:IsDuplicate>
                <a:ItemClassCode>XXX</a:ItemClassCode>
                <a:LocalChannel>XXXX</a:LocalChannel>
                <a:MachineDescription>XXXXXXX</a:MachineDescription>
                <a:OrderNumber>XXXXXX</a:OrderNumber>
                <a:ParentServiceTag i:nil="true" />
                <a:ServiceTag>XXXXXX</a:ServiceTag>
                <a:ShipDate>2010-04-12T19:00:00</a:ShipDate>
                <a:Warranties>
                    <a:Warranty>
                        <a:EndDate>2011-04-13T18:59:59</a:EndDate>
                        <a:EntitlementType>INITIAL</a:EntitlementType>
                        <a:ItemNumber>709-10398</a:ItemNumber>
                        <a:ServiceLevelCode>CB</a:ServiceLevelCode>
                        <a:ServiceLevelDescription>Collect and Return Initial with Dates</a:ServiceLevelDescription>
                        <a:ServiceLevelGroup>5</a:ServiceLevelGroup>
                        <a:ServiceProvider i:nil="true" />
                        <a:StartDate>2010-04-12T19:00:00</a:StartDate>
                    </a:Warranty>
                </a:Warranties>
            </a:DellAsset>
        </a:Response>
    </GetAssetWarrantyResult>
</GetAssetWarrantyResponse>

I think I have an issue with the namespace and whatever I've tried so far didn't work.

I've tried so far

XNamespace aw = "a"
XNamespace aw = "a:"
XNamespace aw = "http://schemas.xmlsoap.org/soap/envelope/"

and some other than I can't recall at the moment

private void btDellWaranty_Click(object sender, EventArgs e)
        {
            string serviceTag = tbDellServiceTag.Text;
            string uri= https://api.dell.com/support/v2/assetinfo/warranty/tags?svctags=XXXX&apikey=XXXX";
            XDocument Doc = XDocument.Load(uri);
            XNamespace aw = "a";
            string result = doc.from u in Doc.Descendants(aw + "DellAsset") select (string)u.Element(aw + "MachineDescription").Value;

            XElement result = Doc.Root.Element("GetAssetWarrantyResponse");

        }

Any ideas?

Notes: I pass the tbDellServiceTag.Text correctly to the uri so that's not the issue.

0

2 Answers 2

1

The namespace for a prefix (e.g. a:DellAsset has the prefix a) is denoted by the xmlns:a="..." of the element or the first ancestor element that contains that namespace declaration - GetAssetWarrantyResult in this case.

So, your namespace is:

XNamespace aw = "http://schemas.datacontract.org/2004/07/Dell.AWR.Domain.Asset"
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for explaining my mistake!
1

Try xml linq like this

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication6
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XElement dellAsset = doc.Descendants().Where(x => x.Name.LocalName == "DellAsset").FirstOrDefault();
            XNamespace ns = dellAsset.Name.Namespace;

            string customerNumber = (string)dellAsset.Element(ns + "CustomerNumber");

        }
    }
}

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.