ホームページ > バックエンド開発 > C++ > XDocument を使用して名前空間を持つ XML ドキュメントを適切に解析するにはどうすればよいですか?

XDocument を使用して名前空間を持つ XML ドキュメントを適切に解析するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-30 01:42:36
オリジナル
546 人が閲覧しました

How to Properly Parse XML Documents with Namespaces using XDocument?

XDocument で名前空間を使用して XML を解析する方法

名前空間を含む XML を扱う場合、コード内で名前空間を正しく処理することが重要です。正しい名前空間を指定しないと、XDocument は XML を効果的に解析できない可能性があります。

次の 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}">
    </Correlation>
  </System>
</E2ETraceEvent>
ログイン後にコピー

XDocument を指定せずにこの XML を解析しようとすると、名前空間では、特定の要素に null 値が発生する場合があります。この問題を説明するコード スニペットを次に示します。

XDocument xDoc = XDocument.Parse(XMLString);
XElement xEl1 = xDoc.Element("E2ETraceEvent");
XElement xEl2 = xEl1.Element("System");
XElement xEl3 = xEl2.Element("Correlation");
XAttribute xAtt1 = xEl3.Attribute("ActivityID");
String sValue = xAtt1.Value; // Returns null
ログイン後にコピー

解決策: 名前空間の使用

名前空間を使用して XML を正しく解析するには、次の戦略を使用する必要があります。

  1. で使用される各名前空間の名前空間プレフィックスを定義します。 XML。
  2. XML 内の要素を参照する場合は、名前空間プレフィックスを使用します。

この解決策を示す更新されたコード スニペットは次のとおりです。

XNamespace nsSys = "http://schemas.microsoft.com/2004/06/windows/eventlog/system";
XElement xEl2 = xDoc.Element(nsSys + "System");
XElement xEl3 = xEl2.Element(nsSys + "Correlation");
XAttribute xAtt1 = xEl3.Attribute("ActivityID");
String sValue = xAtt1.Value; // Returns the ActivityID
ログイン後にコピー

名前空間を使用する正しく実行すると、コードが名前空間を含む XML ドキュメントからデータを正確に抽出して操作できることを確認できます。

以上がXDocument を使用して名前空間を持つ XML ドキュメントを適切に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート