0

私が働いている場所には、Perlと対話する必要があるときに使用するコードがあります。基本的に、関数を呼び出し、一連の文字列を(コマンドラインを介して)配列としてPerlに渡します。これはほとんどの場合に正常に機能します。

ただし、XMLデータの文字列を渡す必要があります。私は通常、shiftキーワードを使用して配列からアイテムを抽出します。ただし、xml文字列内に複数のスペースがあるため、これは機能しません。

私はそれをそのように書いてみました:

while(shift)
{
   my $temp = shift;
   $animalXML = $animalXML.$temp;

}

しかし、それはxmlタグを実際にはうまく処理しません。たとえば、次のセクション:

<?xml version="1.0" encoding="utf-16"?><ToggleExclusion   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

次のように読み取られて保存されます:

version="1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

誰かが私がこれにどう対処できるか知っていますか?

ありがとう。

4

3 に答える 3

3

これは Perl の問題ではなく、コマンド ラインの引用の問題です。文字列を適切に引用すると、単一の ARGV アイテムとして Perl スクリプトに取り込まれ、操作を行う必要がなくなります。

于 2011-03-21T13:12:45.493 に答える
1

単一の文字列を作成してに渡すとRun、明らかに (これはどの言語とプラットフォームですか?) コマンドライン インタープリター ( cmd? /bin/sh?) に渡され、そのコマンド ラインが解析され、コマンドの名前と引数として解釈されます。 、引数を指定してコマンドを呼び出します。

コマンド ライン インタープリターには、 などの特別な意味を持つ独自の特殊文字があります。その<ため、そのような文字の出現はすべて、コマンド ライン インタープリターがサポートする方法を使用して適切にエスケープするか引用符で囲む必要があります。さらに、コマンド ライン インタープリターは、使用されている文字セットについて、すべてが UTF-16 である入力文字列、またはさらに悪いことに、UTF-16 と他の何かが混在している入力文字列にはおそらく当てはまらないという特定の期待を持っています。

Perl スクリプトを変更できない場合: コマンド ライン インタープリターをRun省略して、引数付きのコマンドを直接呼び出す多引数バリアントを使用します。

Perl スクリプトを変更できる場合: プロが行うように、コマンド ライン引数からではなく、標準入力から入力を読み取るようにします。

もう 1 つのアイデアは、XML と非 XML を混在させないことです。そのため、XML::LibXMLなどの適切な XML ライブラリを使用して入力を解析できます。これにより、XML コンテンツの引用/エスケープの問題がさらに処理されます。

于 2011-03-21T13:31:24.960 に答える
0

のドキュメントを読んでくださいtask.Run。問題はそこからです。あなたは方法を探しています

  • シェルをバイパスするか
  • またはシェルの引数を引用します。
于 2011-03-21T13:35:00.030 に答える