2

我正在尝试用 XXYY1 替换 XML 标记中的 MessageParam ...

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。

我的第二个选择是从一个 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 回答