加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:22:32 所属栏目:百科 来源:网络整理
导读:/** 题目详情 本题来自蓝港在线技术团队的idea,详情如下: 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("nt"+" "+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("ntt"+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 //提示:自动阅卷结束唯一标识,请勿删除或增加。


}

测试结果如下:

明明解析出来了



(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读