我在网站上查看了几个正则表达式问题但没有工作,如果有人感觉到这种情况,那就很抱歉。 我在XML文件中有这个字符串:
<MessageRef>Trading01</MessageRef>
每次生成xml时,Trading01
将是一个不同的String(需要手动输入)。目标是在此处自动生成任何唯一值以用于测试目的。如何删除<MessageRef>
和</MessageRef>
之间的任何内容?
我试过这个,但它不起作用:
message.replaceAll("(<MessageRef>)[^&]*(</MessageRef>)", String.valueOf(System.currentTimeMillis()));
这是一个我知道的简单问题,但整个上午都让我烦恼!任何帮助将不胜感激!
答案 0 :(得分:2)
我尝试了这个,它修改了XML标记内的任何内容:
message.replaceAll("(<MessageRef>)[^&]*(</MessageRef>)", "<MessageRef>" + String.valueOf(System.currentTimeMillis()) + "</MessageRef>");
输出:
<MessageRef>1435744441381</MessageRef>
答案 1 :(得分:2)
Regex is not best tool to parse XML。请改用解析器。我喜欢使用Jsoup来简化它(它的主要目的是成为HTML解析器,因此它支持CSS查询)。
这是代码示例
String text = "<MessageRef>Trading01</MessageRef>";
Document doc = Jsoup.parse(text, "", Parser.xmlParser());
System.out.println(doc);
System.out.println("---------");
Elements elements = doc.select("MessageRef");// cssQuery
for (Element el : elements) {//for each tag named MessageRef
//set its text value to:
el.text("date = " + new Date());
}
String replaced = doc.toString();
System.out.println(replaced);
输出:
<messageref>
Trading01
</messageref>
---------
<messageref>
now = Wed Jul 01 12:03:52 CEST 2015
</messageref>
如果您想阻止文本美化以符合XML标准,例如添加新行,请使用
doc.outputSettings().prettyPrint(false);
你会得到
<messageref>Trading01</messageref>
---------
<messageref>date = Wed Jul 01 12:07:42 CEST 2015</messageref>
答案 2 :(得分:1)
你也可以这样做:
正则表达式:<MessageRef>(.*?)</MessageRef>
示例:
System.out.println(message.replaceAll("<MessageRef>(.*?)</MessageRef>", "<MessageRef>" + String.valueOf(System.currentTimeMillis() + "</MessageRef>")));
答案 3 :(得分:0)
以下也可以
public static void main(String[] args) {
String input="<MessageRef>Trading01</MessageRef>";
System.out.println(input.substring(0,input.indexOf(">", 0)+1)+System.currentTimeMillis()+input.substring(input.indexOf("<",1),input.length()));
}