<emp>
<name>Jhon</name>
<sal>2000</sal>
</emp>
为string.I需要生成字符串的XML文件,我需要用的名字命名tag.eg:Jhon.xml生成的XML文件,我会得到这个XML。请为我提供一些指导,以便在不使用解析器的情况下在java中执行相同的操作。获取特定的子从一个大的字符串
<emp>
<name>Jhon</name>
<sal>2000</sal>
</emp>
为string.I需要生成字符串的XML文件,我需要用的名字命名tag.eg:Jhon.xml生成的XML文件,我会得到这个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
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except -xhtml-self-contained-tags/1732454#1732454 – Rekin
但是,在另一边:http://stackoverflow.com/questions/4231382/regular-expression-pattern-not-matching-anywhere-in-string/4231482# 4231482 – Rekin
可能复制到:http://stackoverflow.com/questions/335250/parsing-xml-with-regex-in-java – fyr