XDocument 内の名前空間を使用した XML の移動
名前空間を含む XML を操作する場合、XDocument での要素のクエリへの影響を考慮することが重要です。デフォルトでは、XDocument 要素は名前空間を考慮せずにクエリされます。これは、提供されている XML の例に示されているように、予期しない結果につながる可能性があります:
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> <EventID>589828</EventID> <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" /> </System> </E2ETraceEvent>
このシナリオでは、名前空間が存在するため、次のコードは xEl1 に対して null を返します:
XDocument xDoc = XDocument.Parse(CurrentString); XElement xEl1 = xDoc.Element("E2ETraceEvent");
名前空間に関する問題の解決
名前空間を使用して XML を正しくナビゲートするには、 XNamespace クラスを使用します。 XNamespace は、クエリ中に名前空間を指定し、それを要素名と組み合わせる方法を提供します。修正されたコードは次のとおりです。
XNamespace nsSys = "http://schemas.microsoft.com/2004/06/windows/eventlog/system"; XElement xEl2 = xDoc.Element(nsSys + "System");
これで、xEl2 には、指定された名前空間を持つ System 要素が含まれるようになります。関連する名前空間を組み込んで、同様に XML ツリーをナビゲートし続けることができます。
追加メモ
以上がXDocument を使用して名前空間を持つ XML 要素を効果的にクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。