<emp>
<name>Jhon</name>
<sal>2000</sal>
</emp>
我将得到这个xml字符串。我需要从该字符串生成一个xml文件,并且我需要使用名称标签来命名生成的xml文件,例如:Jhon.xml。请为我提供一些在Java中执行此操作的指针,而不使用解析器。
<emp>
<name>Jhon</name>
<sal>2000</sal>
</emp>
我将得到这个xml字符串。我需要从该字符串生成一个xml文件,并且我需要使用名称标签来命名生成的xml文件,例如:Jhon.xml。请为我提供一些在Java中执行此操作的指针,而不使用解析器。
BufferedReader br =
String line;
while((line = br.readLine()) != null) {
String[] parts = line.split("[<>]");
String tag = parts[1];
String value = parts[2];
if ("name".equals(tag)) {
} else if ("ruleId".equals(tag)) {
} else if ("ruleVersion".equals(tag)) {
}
}
尽管在使用正则表达式处理XML时需要谨慎,但以下代码可以一行搞定:
String filename = input.replaceAll("(?s).*<name>(.*)</name>.*<ruleId>(.*)</ruleId>.*<ruleVersion>(.*)</ruleVersion>.*", "$1_$2_$3.xml");
(?s)
很重要 - 它打开了“点匹配换行符”开关,因此您的输入可以包含多行(即嵌入式换行符),但被视为单行。
这是一个您可以运行的测试:
public static void main(String[] args) throws Exception
{
String input = "<name>remove use case</name>\n <ruleId>2161</ruleId>\n <ruleVersion>0.0.1</ruleVersion>\n <ruleStatus>New</ruleStatus>\n <nuggetId>489505737</nuggetId>\n <icVersionId>50449</icVersionId>\n <rlVersion>1.0</rlVersion>\n <modelVersion>1.0</modelVersion>\n <attributes>\n <attribute>\n <attributeName/>\n <value/>\n </attribute>\n </attributes>\n <notes></notes>";
String filename = input.replaceAll("(?s).*<name>(.*)</name>.*<ruleId>(.*)</ruleId>.*<ruleVersion>(.*)</ruleVersion>.*", "$1_$2_$3.xml");
System.out.println(filename);
}
输出:
remove use case_2161_0.0.1.xml