1. ホーム
  2. xml

[解決済み] XPathで名前空間を無視する方法

2022-08-12 10:44:57

質問

私の目標は、XPath を使用して、複数の名前空間を持つ複数の XML ファイルから特定のノードを抽出することです。名前空間 URI を知っている限り、すべてうまくいきます。名前空間名自体は一定ですが、スキーマ (XSD) はクライアントが生成したもの、つまり、私にはわからないものであることがあります。その場合、基本的に 3 つの選択肢が残されています。

  1. 名前空間に対してただ 1 つのスキーマを使用し、何も問題がないことを期待する (確信が持てるか?)。
  2. ドキュメントの子ノードを取得し、名前空間 URI を持つ最初のノードを探し、それがあることを願い、それが正しいものであることを願いながらその URI を使用するだけです。これは複数の理由でうまくいかないことがあります。
  3. どうにかしてxpathに伝える: "見て、私は名前空間について気にしない、ただこの名前を持つすべてのノードを見つける、私はあなたに名前空間の名前を伝えることもできる、ただURIはダメだ"。そして、これがここでの質問です...

これは、数多くの "名前空間の認識を認識していないため xpath 式が動作しない" という質問の再掲ではありません。 ここで または ここで . 名前空間認識を使用する方法は知っていますが、それを取り除く方法は知りません。

どのように解決するのですか?

を使用することができます。 local-name() XPath関数です。のようなノードを選択する代わりに

/path/to/x:somenode

を使えば、すべてのノードを選択し、正しいローカル名を持つノードをフィルタリングすることができます。

/path/to/*[local-name() = 'somenode']