6

私の入力

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

マイコード

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")
             );

私の質問

nsするたびに追加する必要がありnode.Element()ますか? または他の方法はありますか?

4

1 に答える 1

8

node.Element() を実行するたびに ns を追加する必要がありますか?

はい、基本的に。Bローカル名が "http://abc.com" で、名前空間 URI が "http://abc.com"の要素を (たとえば) 探しているとします。

適切なローカル名を持つ任意の要素に一致する独自の拡張メソッドを作成できますが、それはお勧めしません。次のようになります。

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);
}

ただし、これによりコードの信頼性が低下します。古い名前だけを正しいローカル名に一致させたいですか?

于 2012-10-05T21:36:52.517 に答える