英雄会之蓝港在线:xml字符串文件解析之错在何方???

前端之家收集整理的这篇文章主要介绍了英雄会之蓝港在线:xml字符串文件解析之错在何方???前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

/**

题目详情


本题来自蓝港在线技术团队的idea,详情如下:

XML-可扩展标记语言 ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,被广泛的运用于数据传输和存储。请编写一段程序,不使用语言之外的开源库,解析对应的XML文件,并格式化后在屏幕上打印出来。


举个例子如下,当给定下述XML文件时:

<?xml version="1.0" ?>

<Books>

<Book>

<Name = “The C++ Programming Language” Author=”Bjarne Stroustrup” />

</Book>

<Book>

<Name = “Effective C++” Author = “Scott Meyers” />

</Book>

</Books>

它对应的输出应该是:

Books

Book 1

Name:The C++ Programming Language

Author:Bjarne Stroustrup

Book 2

Name:Effective C++

Author:Scott Meyers







挑战规则:
1、xml分为三级,一级为大类,二级为实体,三级为属性 2、三级之间用换行间隔,每级间开始用缩格。 3、二级对象后间隔一个空格,并输出对象所在xml中的顺序号 4、第三级顺序输出属性名称属性值,属性名和属性值间用:间隔 5、输入格式: 输入为单一xml格式字符串,其中带有"字符。可能带有回车换行符。 6、输出格式: 输出数据中不带"字符,输出格式中的每行开头使用Tab字符作为缩进。每行结尾使用回车换行符作为结束 7、属性名字不包含引号和等号,不包含大于小于等特殊字符。 8、不能使用语言之外的开源库。

*/



import java.util.regex.Pattern;

public class XMLparse
{
public static String ParsingXML(String in)
{

String regEx_script = "<\\?xml[^>]*?>"; //去掉xml 版本说明 正则表达式
String regEx_style = "<|/";//去掉 < 或者 / 正则表达式
String regEx_xml ="</[^>]+>"; //去掉所有的结束标签
String regEx_gt = ">";
String xmlStr = in; //含xml标签的字符串


java.util.regex.Pattern p_script;
java.util.regex.Matcher m_script;


p_script = Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE);
m_script = p_script.matcher(xmlStr);
xmlStr = m_script.replaceAll(""); //过滤 xml 声明标签



p_script = Pattern.compile(regEx_xml,Pattern.CASE_INSENSITIVE);
m_script = p_script.matcher(xmlStr);
xmlStr = m_script.replaceAll(""); //过滤 所有的结束标签 例如 </span>

p_script = Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE);
m_script = p_script.matcher(xmlStr);
xmlStr = m_script.replaceAll(""); //过滤 开始标签的 "<" 或者 但标记 标签的 "/"


p_script = Pattern.compile(regEx_gt,Pattern.CASE_INSENSITIVE);
m_script = p_script.matcher(xmlStr);
xmlStr = m_script.replaceAll("\n"); //过虑掉开始标签 ">" 然后 替换 一个\N 实现换行
xmlStr= xmlStr.replaceAll("=",":");
return format(xmlStr) ;

}
public static String format(String in){
int count=0;
String[] result =in.split("\\n");
StringBuffer text=new StringBuffer(result[0]);
String[] attr=null;
String str="";
for(int i=1;i<result.length;i++){
if(i%2!=0){
count++;
text.append("\n\t"+" "+result[i]+" "+count);
}else{

//将属性字符串进行切割

//可解析任意多个属性

attr=result[i].split("\"");
for(int t=0;t<attr.length;t++){
str+=attr[t].trim();
if(t%2!=0){
text.append("\n\t\t"+str);
str="";
}

}

}

}
return text.toString();
}


//start 提示自动阅卷起始唯一标识,请勿删除增加
public static void main(String args[])
{
// 冤啊!!!!!!!
//测试结果跟答案一样,为什么提交代码你们就说无法解析?????
//到底是不是坑人啊你们???
///你们要人家解析的那条xml 字符窜双引号是否已经转义??????
//如果没有的话还解析个屁呀!!!!坑人呀!!坑人呀!!
String in= "<?xml version=\"1.0\" ?><Books><Book>< age=\"1\" Name =\"The C++ Programming Language\" Author=\"Bjarne Stroustrup\" /></Book><Book><Name = \"Effective C++\" Author = \"Scott Meyers\"/></Book></Books>";


System.out.println(ParsingXML(in));
}

//end //提示自动阅卷结束唯一标识,请勿删除增加


}

测试结果如下:

明明解析出来了



猜你在找的XML相关文章