次の方法で共有


方法 : 名前空間内の XML に対するクエリを記述する

更新 : November 2007

名前空間内の XML に対するクエリを記述するには、正しい名前空間を持つ XName オブジェクトを使用する必要があります。

C# での最も一般的な方法は、URI を含んだ文字列を使用して XNamespace を初期化し、加算演算子オーバーロードを使用して名前空間をローカル名に連結することです。

Visual Basic での最も一般的な方法は、グローバル名前空間を定義し、その名前空間を使用する XML リテラルおよび XML プロパティを使用することです。既定のグローバル名前空間を定義できます。その場合、XML リテラルの要素は既定でこの名前空間に含まれることになります。または、プレフィックスを持つグローバル名前空間を定義し、そのプレフィックスを必要に応じて XML リテラルや XML プロパティで使用できます。XML のその他の形式と同様に、属性は既定でどの名前空間にも含まれません。

このトピックの最初に示す一連の例では、既定の名前空間内に XML ツリーを作成する方法を C# と Visual Basic の両方について示します。2 つ目の例では、プレフィックスを持つ名前空間で XML ツリーを作成する方法を示します。この例でも C# と Visual Basic 両方の言語について示します。

使用例

次の例では、既定の名前空間に含まれる XML ツリーを作成しています。さらに、要素のコレクションを取得しています。

XNamespace aw = "https://www.adventure-works.com";
XElement root = XElement.Parse(
@"<Root xmlns='https://www.adventure-works.com'>
    <Child>1</Child>
    <Child>2</Child>
    <Child>3</Child>
    <AnotherChild>4</AnotherChild>
    <AnotherChild>5</AnotherChild>
    <AnotherChild>6</AnotherChild>
</Root>");
IEnumerable<XElement> c1 =
    from el in root.Elements(aw + "Child")
    select el;
foreach (XElement el in c1)
    Console.WriteLine((int)el);
Imports <xmlns="https://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim root As XElement = _
            <Root>
                <Child>1</Child>
                <Child>2</Child>
                <Child>3</Child>
                <AnotherChild>4</AnotherChild>
                <AnotherChild>5</AnotherChild>
                <AnotherChild>6</AnotherChild>
            </Root>
        Dim c1 As IEnumerable(Of XElement) = _
            From el In root.<Child> _
            Select el
        For Each el As XElement In c1
            Console.WriteLine(el.Value)
        Next
    End Sub
End Module

この例では次の出力が生成されます。

1
2
3

C# では、プレフィックスを持つ名前空間を使用する XML ツリーでも、既定の名前空間を持つ XML ツリーでも、クエリを記述する方法は同じです。

一方、Visual Basic では、プレフィックスを持つ名前空間を使用する XML ツリーでクエリを記述する場合と、既定の名前空間内の XML ツリーに対してクエリを実行する場合とで、大きく異なります。通常は、Imports ステートメントを使用してプレフィックスを持つ名前空間をインポートします。この場合、XML ツリーを作成するときに要素および属性の名前でプレフィックスを使用します。また、XML プロパティを使用して XML ツリーに対してクエリを実行するときにもプレフィックスを使用します。

次の例では、プレフィックスを持つ名前空間に含まれる XML ツリーを作成しています。さらに、要素のコレクションを取得しています。

XNamespace aw = "https://www.adventure-works.com";
XElement root = XElement.Parse(
@"<aw:Root xmlns:aw='https://www.adventure-works.com'>
    <aw:Child>1</aw:Child>
    <aw:Child>2</aw:Child>
    <aw:Child>3</aw:Child>
    <aw:AnotherChild>4</aw:AnotherChild>
    <aw:AnotherChild>5</aw:AnotherChild>
    <aw:AnotherChild>6</aw:AnotherChild>
</aw:Root>");
IEnumerable<XElement> c1 =
    from el in root.Elements(aw + "Child")
    select el;
foreach (XElement el in c1)
    Console.WriteLine((int)el);
Imports <xmlns:aw="https://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim root As XElement = _
            <aw:Root>
                <aw:Child>1</aw:Child>
                <aw:Child>2</aw:Child>
                <aw:Child>3</aw:Child>
                <aw:AnotherChild>4</aw:AnotherChild>
                <aw:AnotherChild>5</aw:AnotherChild>
                <aw:AnotherChild>6</aw:AnotherChild>
            </aw:Root>
        Dim c1 As IEnumerable(Of XElement) = _
            From el In root.<aw:Child> _
            Select el
        For Each el As XElement In c1
            Console.WriteLine(CInt(el))
        Next
    End Sub
End Module

この例では次の出力が生成されます。

1
2
3

参照

その他の技術情報

XML 名前空間の使用