コマンドラインでxmlファイル(output.xmlという名前)からデータを抽出しようとしています。 、それをスクリプトに入れてください)。コマンドラインでXMLStarletを使用してXMLファイルからデータを抽出できない(名前空間制限)
これを行うためのより良いツールは、XMLStarletです。ただし、xmlstarlet sel -t -m "/entry/content" output.xml
は機能しません。
注:私はxmlstarlet el output.xml
のファイルのXpath構造をチェックしようとしました。それはツールが要素を見ることを意味します。
私はXMLStarletの仕事を作るための2つの条件があることを見た:
1- XMLファイルが整形式でなければなりません。 Stackoverflow related link
は、だから私はよく形成されたファイルを作成するには、このコマンドを適用:
xmlstarlet fo -R output.xml >> good-output.xml
2 - XMLは、既定の名前空間について非常にうるさいです。文書にその要素がある場合は、要素を選択する前に宣言するか、文書内の「xmlns」のすべての要素を削除します。 Stackoverflow related link
は、だから私がやった:
$ cat good-output.xml | sed -e 's/ xmlns.*=".*"//g' >> very-good-output.xml
をしかし、これらの2つのステップを実行し、私は別のエラーを持っている、と場所に私に...ターミナルポイントをそれを修正する方法がわかりません私は名前空間を削除し、 "コレクションの名前空間接頭辞のアプリケーションは定義されていません"と言います。私は何をすべきか?名前空間では機能しませんし、今度は再び私にそれらを置くように促します...
助けてください?
Screenshot of the original problem
Screenshot of the final problem
さて、多分私は、なぜ、端末が私を非難されて理解してきました。エラーがあるタグは次のようになります。 「word:anotherword」 この表記は、このタグでxmlns属性が見つかるはずです。しかし、私はこれらの表記をどのように削除できるのか分かりません。私はREGEXを使用しなければならないと思うが、私はまだそのような行為をするのに慣れていない。 –
文書で名前空間を定義している場合は、XPath式で接頭辞を使用できます。http://xmlstar.sourceforge.net/doc/UG/ch05.htmlも参照してください。 – npostavs
ありがとう!私は 'xmlstarlet sel -t -m" // _:content "-cを使いました。 good-output.xml'とそれに対応するタグを与えました。唯一の問題は、タグの内容とタグの内容ではなくタグの内容のみが必要なことです。どうすればいいですか? –