2011-07-16 32 views
4
<emp> 
<name>Jhon</name> 
<sal>2000</sal> 
</emp> 

爲string.I需要生成字符串的XML文件,我需要用的名字命名tag.eg:Jhon.xml生成的XML文件,我會得到這個XML。請爲我提供一些指導,以便在不使用解析器的情況下在java中執行相同的操作。獲取特定的子從一個大的字符串

+2

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except -xhtml-self-contained-tags/1732454#1732454 – Rekin

+0

但是,在另一邊:http://stackoverflow.com/questions/4231382/regular-expression-pattern-not-matching-anywhere-in-string/4231482# 4231482 – Rekin

+0

可能複製到:http://stackoverflow.com/questions/335250/parsing-xml-with-regex-in-java – fyr

回答

2

使用字符串子字符串或正則表達式解析文件。我假設你的意思是你不想解析每一個細節。

如果您知道每個元素都在一行上,您可以使用以下方法。

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)) { 

    } 
} 
0

雖然謹慎使用正則表達式在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 
+0

雖然我會做類似的方法,但我不會把所有東西都放到一個正則表達式中。當然,這種方式要短得多,但如果某個文件的標籤順序不同(這對於通用xml解析無關緊要),也會出現錯誤。 – Mario

+0

非常感謝,它爲我工作。 – mohan

相關問題