2

XML タグ内の MessageParam を XXYY1 に置き換えようとしています...

The MessageParam has requested to travel <BR/>From <MessageParam name="0" desc="city code"/> to <MessageParam name="1" desc="city code"/> on <MessageParam name="2" desc="date"/> at <MessageParam name="3" desc="time"/>.

出力が

The MessageParam has requested to travel <BR/>From <XXYY1 name="0" desc="city code"/> to <XXYY2 name="1" desc="city code"/> on <XXYY3 name="2" desc="date"/> at <XXYY4 name="3" desc="time"/>.

これが私のコードです

private void ProcessString()
{
    String text = "The Traveler has requested to travel <BR/>From <MessageParam name=\"0\" desc=\"city code\"/> to <MessageParam name=\"1\" desc=\"city code\"/> on <MessageParam name=\"2\" desc=\"date\"/> at <MessageParam name=\"3\" desc=\"time\"/>.";
    int Counter = 0;
    StringBuffer outString = new StringBuffer();
    Pattern pattern = Pattern.compile("(<MessageParam.*?>)");
    Matcher matcher = pattern.matcher(text);

    while (matcher.find())
    {
        Counter++;
        String sReplacer = new StringBuffer("XXYY").append(Counter).toString();
        matcher.appendReplacement(outString, sReplacer);
    }
    matcher.appendTail(outString);
    System.out.println(outString.toString());
  }

私が得ている出力は

 The MessageParam has requested to travel <BR/> From XXYY1 to XXYY2 on XXYY3 at XXYY4.

私の正規表現が正しくないことは確かです。私は正規表現が苦手なので、何がうまくいかないのかわかりません。

4

3 に答える 3

3

私は正規表現でそのようなことをしません。

Velocity のようなテンプレート エンジンを使用して、ソース XML を解析し、ターゲット値を出力 XML にマップしたいと考えています。

2 番目の選択肢は、ある XML から別の XML への XSL-T 変換です。

于 2013-01-06T19:16:20.013 に答える
2

正規表現は(?<=<)MessageParam

それはあなたの問題を解決するでしょう

于 2013-01-06T19:38:27.977 に答える
0

単純<MessageParamに正規表現として使用<XXYYし、置換文字列部分として使用します。

于 2013-01-07T03:48:59.280 に答える