是否可以将xml字符串拆分为数组中的元素?

时间:2016-03-09 09:11:01

标签: java

假设我有xml字符串。

String str="<loan><account>123456</account><name>RamaKrishna</name><principle>1000</principle><issue_date>Jan-1-2013</issue_date><interest_rate>12%</interest_rate></loan>"

我的输出应该像

arr = ["<account>123456</account>","<name>RamaKrishna</name>","<principle>1000</principle>","<issue_date>Jan-1-2013</issue_date>","<interest_rate>12%</interest_rate>"]

2 个答案:

答案 0 :(得分:1)

这个答案将是静态的(只是回答你的问题)和@Vikrant Kashyap一样提到XML文档对于更通用的解决方案来说是更好的选择。

public static void main(String[] args) {

    //Orginal string, remove the loan tags
    String str="<loan><account>123456</account><name>RamaKrishna</name><principle>1000</principle><issue_date>Jan-1-2013</issue_date><interest_rate>12%</interest_rate></loan>";
    str = str.replace("<loan>", "");
    str = str.replace("</loan>", "");

    //Create an array of the string
    List<Character> list = new ArrayList<Character>();
    for(char c : str.toCharArray()) {
            list.add(c);
    }       

    //Result
    ArrayList<String> tmp = XmlComma(list);

}

和XmlComma方法:

public static ArrayList<String> XmlComma(List<Character> input) {
        ArrayList<String> result = new ArrayList<String>();
        String output = "";
        for(int i = 0; i < input.size(); i++)
        {
            if(i != (input.size() -1))
            {
                if(!input.get(i).equals(','))
                {
                    output += input.get(i);
                }
                if(input.get(i).equals('>') && input.get(i+1).equals('<'))
                {               
                    result.add(output);
                    output = "";
                }
            }
            else
            {
                output += '>';
                result.add(output);
            }
        }
        return result;      
    }

答案 1 :(得分:0)

你可以尝试:

  

String [] split = str.split(&#34;(?=(&lt; [^ \ _] +&gt;?&lt; \ /.*?&gt;))&#34;);

如果您正在尝试保持标签不变。 ?=将保留您的标签,但是单独删除最后一个贷款标签,这将无需嵌套即可。如果不保留标签,您可以这样做:

  

String [] split = s.split(&#34;&lt;。*?&gt;&#34;);