LINQ to XML での XML 名前空間の処理
名前空間を含む XML データを処理する場合、必要な要素を取得して操作するには、名前空間を適切に処理することが重要です。 LINQ to XML を使用して、名前空間を含む XML を走査する方法は次のとおりです。
提供されるサンプルコード:
<code class="language-csharp">string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>"; XDocument xmlElements = XDocument.Parse(theXml); var elements = from data in xmlElements.Descendants("Result") select new { TheBool = (bool)data.Element("TheBool"), TheId = (int)data.Element("TheId"), };</code>
XML 文字列で名前空間が使用されている場合、このコードは XML を正しく解析せず、結果として null 値が発生します。この問題を解決するには、LINQ クエリで XML 名前空間を明示的に指定する必要があります。
LINQ クエリで XML 名前空間を定義するには、XNamespace
オブジェクトを使用できます。このオブジェクトを使用すると、適切な名前空間プレフィックスと URI を持つ XName
インスタンスを作成できます。
以下は修正されたコードです:
<code class="language-csharp">string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>"; XDocument xmlElements = XDocument.Parse(theXml); XNamespace ns = "http://myvalue.com"; XNamespace nsa = "http://schemas.datacontract.org/2004/07/My.Namespace"; var elements = from data in xmlElements.Descendants(ns + "Result") select new { TheBool = (bool)data.Element(nsa + "TheBool"), TheId = (int)data.Element(nsa + "TheId"), };</code>
修正されたコードでは、最初に名前空間 URI を使用して XNamespace
オブジェクト ns
と nsa
を宣言します。次に、Descendants
クエリと Element
クエリで、名前空間プレフィックスを付けて XName
を指定します。このようにして、LINQ to XML は、指定された名前空間内の要素を正しく識別してアクセスできます。
以上がLINQ to XML を使用して名前空間を含む XML を正しく解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。