2

使用できない名前空間を参照する XML ドキュメントがあります。

<microplateDoc xmlns="http://moleculardevices.com/microplateML">
...my data is here...
</microplateDoc>

私はそれをうまく読み取るスクリプトを持っていますが、上記の2つのタグを削除した場合にのみ、それ以外の場合はすべて台無しに読み取られます。無視するだけでいいの?すべての入力ファイルを調べて、これらの 2 行を削除する別のスクリプトを作成することを考えていますが、もっと良い方法があると思いますか?

すべてのデータファイルを調べて、これらの 2 行を削除した場合、スクリプトを使用してそれを行う最善の方法は何ですか? 各ファイルを開き、それらの用語を検索し、それらを削除し、ファイルを保存するだけだと思います。もっと良い方法を考えられますか? ありがとう。

4

5 に答える 5

4

使用できない名前空間を参照する XML ドキュメントがあります。

XML 名前空間とは何かについて混乱していると思います。名前空間は RFC 3305 に準拠した文字列であるUniform Resource Identifierです。URL はすべて URI であるため、Uniform Resource Locatorである可能性はありますが、 (必ずしも) ではありません。

重要なことは、XML 名前空間が で始まっているからとhttp://いって、XML パーサーがそれを検索するわけではないということです。そうはなりません (それを書いた人が名前空間とは何かを理解していなければ、これよりも多くの問題が発生することになります)。

この XML 文書を読み取るスクリプトが「すべてめちゃくちゃに読み取る」というのは、何を意味しているのかわかりません。無視して大丈夫ですか?そうかもしれません。結局のところ、名前空間の目的の 1 つは、そのドキュメントの一部の利用者が無視できる XML ドキュメントに情報を埋め込むことができるようにすることです。

一方、これらのファイルを使用しているのは自分だけではない場合、他の人が必要としているデータを削除することで、自分自身に大きな問題を引き起こす可能性があります。

于 2010-01-04T08:28:14.823 に答える
1

名前空間が xml ドキュメントで適切にプレフィックスされていない場合、XML::LibXML モジュールが xml ファイル/コンテンツを適切に解析していないことを示していますか? 回避策は、名前空間を動的に削除することです。次のようなことができます。

$xml =~ s/xmlns\=([\S]+)//m;

これにより、xmlns="" で始まるすべてが削除されます。

于 2013-09-12T15:16:14.230 に答える