6

My Input

<A xmlns="http://abc.com"> 
    <B>"b"</B>
    <C>"c"</C>
    </A>

My Code

XNamespace ns = XNamespace.Get("http://abc.com");

var query= from node in doc.Descendants(ns+ "A") 
           select new
            (
                        B = (string)node.Element(ns+"B"),
                            C = (string)node.Element(ns+ "C")
             );

My Question

Do I have to add ns every time I am doing node.Element()? or is there any other way?

2
  • 1
    There's a related question here, too: stackoverflow.com/questions/2610947/… Commented Oct 5, 2012 at 21:37
  • I believe XPath could offer an alternative, but it's more complicated than what you're doing here. Commented Oct 5, 2012 at 21:57

1 Answer 1

8

Do I have to add ns every time I am doing node.Element()?

Yes, basically. You're looking for (say) an element with a local name of B and a namespace URI of "http://abc.com".

You could write your own extension method which matched any element with the right local name, but I'd advise against it. It would be something like:

public IEnumerable<XElement> ElementsWithLocalName(this XContainer container,
    string localName)
{
    return container.Elements().Where(x => x.Name.LocalName == localName);
}

public IEnumerable<XElement> ElementsWithLocalName<T>(
    this IEnumerable<T> source,
    string localName) where T : XContainer
{
    return source.Elements().Where(x => x.Name.LocalName == localName);
}

This would make your code less reliable though - do you really want to match just any old name with the right local name?

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

1 Comment

No I do not really want to do that, but I thought doc.Descendants(ns+ "A") makes sense, but for children nodes isn't that redundant information? Doesn't it imply that any node under A would have same namespace URI as A's namespace URI?

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.