题目是:写一段java程序,解析XML文档,把XML文档信息显示在页面。
<?xml version="1.0" encoding="gb2312"?>
<books>
<book email="soft">
<name color="red" size="3">test</name>
<age size="3">22</age>
</book>
</books>我已经写了个程序 ,可以把email和name 得值打印在控制台,程序如下:package com.test;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;public class testJDom {
public testJDom(){
String xmlpath="people.xml";
SAXBuilder builder=new SAXBuilder(false);
try{
Document doc=builder.build(xmlpath);
Element books=doc.getRootElement();
List booklist =books.getChildren("book");
for(Iterator iter=booklist.iterator();iter.hasNext();){
Element book=(Element)iter.next();
String email=book.getAttributeValue("email");
System.out.println(email);
String name=book.getChildTextTrim("name");
System.out.println(name);
book.getChild("name").setText("alterrizih");
}
XMLOutputter outputter=new XMLOutputter();
outputter.output(doc, new FileOutputStream(xmlpath));
}catch(JDOMException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
new testJDom();
}
}
我想问的是 该如何改能够达到题目的要求。(注:页面数据颜色,大小也要按xml要求的),
多谢各位大哥,小弟不胜感激。解答越详细越好,
<?xml version="1.0" encoding="gb2312"?>
<books>
<book email="soft">
<name color="red" size="3">test</name>
<age size="3">22</age>
</book>
</books>我已经写了个程序 ,可以把email和name 得值打印在控制台,程序如下:package com.test;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;public class testJDom {
public testJDom(){
String xmlpath="people.xml";
SAXBuilder builder=new SAXBuilder(false);
try{
Document doc=builder.build(xmlpath);
Element books=doc.getRootElement();
List booklist =books.getChildren("book");
for(Iterator iter=booklist.iterator();iter.hasNext();){
Element book=(Element)iter.next();
String email=book.getAttributeValue("email");
System.out.println(email);
String name=book.getChildTextTrim("name");
System.out.println(name);
book.getChild("name").setText("alterrizih");
}
XMLOutputter outputter=new XMLOutputter();
outputter.output(doc, new FileOutputStream(xmlpath));
}catch(JDOMException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
new testJDom();
}
}
我想问的是 该如何改能够达到题目的要求。(注:页面数据颜色,大小也要按xml要求的),
多谢各位大哥,小弟不胜感激。解答越详细越好,
解决方案 »
- List is a raw type. References to generic type List<E> should be parameterized
- 请大家帮忙解释下以下代码的意思?
- 想做一个网页报纸
- 求助 : 关于iframe 子页面向主页面传参数的问题
- 急急啊 在jsp中ArrayList的对象中保存了javabean,....
- java.net.URL 乱码问题
- 关于定时转入新页面的问题。
- 问一个struts <html:text/>的相关问题,谢谢!
- 字段类型问题:String和Text的问题请教
- 新接到的需求难点,单用mq延迟队列无法完成,请教大佬
- 分页时查询参数如何处理?
- Ext页面取值、赋值问题,救急~~
<?xml version="1.0" encoding="gbk"?>
<Request>
<Ctrl>
<test1 type="String" length="5"> </test1 >
<test2 type="String" length="10"> </test2 >
</Ctrl>
<Head>
<test3 type="String" length="5"> </test3>
<test4 type="String" length="10"> </test4>
</Head>
<Body>
<test1 type="String" length="5"> </test1>
<test2 type="String" length="10"> </test2>
</Body>
</Request> 我想在程序里 对每个节点赋值 用 type length的值来控制
生成的xml为
<?xml version="1.0" encoding="gbk"?>
<Request>
<Ctrl>
<test1>aaaaa </test1 >
<test2>aaaaaaaaaa </test2 >
</Ctrl>
<Head>
<test3>aaaaa </test3>
<test4>aaaaaaaaaa </test4>
</Head>
<Body>
<test1>aaaaa </test1>
<test2>aaaaaaaaaa </test2>
</Body>
</Request> 上面是以前回答过的一个问题, 下面是当时回答的答案, 解析和操作xml, 使用了dom4j, 希望可以帮到你, 今天没时间了, 不给你细看了.package org.aninggo.code.material.sessionfactory;import java.io.File;
import java.io.FileWriter;
import java.util.List;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class T { /**
* DOM4J读写XML示例
*
* @param args
* @throws Exception
*/
public static void main(String[] args) {
try {
XMLWriter writer = null; // 声明写XML的对象
SAXReader reader = new SAXReader(); OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); // 设置XML文件的编码格式 String filePath = "d:\\test.xml";
File file = new File(filePath);
Document document = reader.read(file); // 读取XML文件
Element root = document.getRootElement(); // 得到根节点
boolean bl = false;
for (Object element: root.elements()) {
Element p = (Element) element; //这里得到的节点是你的ctrl, head, body节点
List<Element> children = p.elements();
for(Element e: children) {
int length = Integer.valueOf(e.attributeValue("length")); //获取设置的长度
for(int j = 0; j < length; j ++) {
e.setText(e.getText() + "a");
}
e.remove(e.attribute("length"));
e.remove(e.attribute("type"));
}
}
writer = new XMLWriter(new FileWriter(filePath), format);
writer.write(document);
writer.flush();
writer.close();
System.out.println(" 操作结束! ");
} catch (Exception e) {
e.printStackTrace();
} }
}
String path = ClassLoader.getSystemResource(xmlPath).getFile();
File f = new File(path);
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();
printAttribute(root);
}
private static void printAttribute(Element element){
Iterator it = element.elementIterator();
while(it.hasNext()){
Element book=(Element)it.next();
System.out.print(book.getName()+"\t");
int count = book.attributeCount();
for(int i = 0; i < count ; i ++){
System.out.print(book.attribute(i).getName() +"->"+ book.attribute(i).getValue()+"\t");
}
System.out.println();
List list = element.elements();
for(int i = 0 ; list != null && i < list.size(); i ++){
printAttribute((Element)list.get(i));
}
}
}输出结果:
book email->soft
name color->red size->3
age size->3
public static void printNode(Element root, int j, BufferedWriter bw) throws Exception {
// 输出开始标签前的空格
printSapces(j, bw);
// 输出开始标签
printStartTagName(root, bw);
if (root.hasChildNodes()) {
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i ++) {
Node child = children.item(i);
if (child instanceof Element) {
int a= j + 1;
printNode((Element)child, a, bw);
} else if (child instanceof Text) {
// 输出标签的值
printTagValue(j, (Text) child, bw);
}
}
// 输出结束标签前的空格
printSapces(j, bw);
// 输出结束标签
printEndTagName(root, bw);
}
} /**
* 输出4*j个空格. <BR>
*
* @param j 标签的属于第几层,从零开始计数
* @param bw 需要写入的文件流
* @throws Exception 异常
*/
private static void printSapces(int j, BufferedWriter bw) throws Exception { for (int k = 0; k < 4 * j; k++) {
System.out.print(" ");
bw.write(" ");
}
} /**
* 输出接点的开始标签. <BR>
*
* @param root 节点
* @param bw 需要写入的文件流
* @throws IOException IO异常
*/
private static void printStartTagName(Element root, BufferedWriter bw) throws IOException {
final String attributesStr = getAttributes(root);
System.out.println("<" + root.getTagName() + attributesStr + ">");
bw.write("<" + root.getTagName() + attributesStr + ">");
bw.newLine();
} /**
* 输出接点的结束标签. <BR>
*
* @param root 节点
* @param bw 需要写入的文件流
* @throws IOException IO异常
*/
private static void printEndTagName(Element root, BufferedWriter bw) throws IOException {
System.out.println("</" + root.getTagName() + ">");
bw.write("</" + root.getTagName() + ">");
bw.newLine();
} /**
* 输出接点的值. <BR>
*
* @param j 需要在接点的值前打印的空格数
* @param child 节点
* @param bw 需要写入的文件流
* @throws Exception 异常
*/
private static void printTagValue(int j, Text child, BufferedWriter bw) throws Exception {
String value = child.getData();
if (!"".equals(value.trim())) {
int a= j + 1;
// 输出标签的值
printSapces(a, bw);
System.out.println(value);
bw.write(value);
bw.newLine();
}
} /**
* 取得字符串的形式的节点的所有属性. <BR>
*
* @param node 节点
* @return 节点的属性
*/
private static String getAttributes(Element node) { final StringBuffer attributesStr = new StringBuffer(); if (null == node || node.getAttributes() == null) {
return "";
}
NamedNodeMap attributeMap = node.getAttributes();
for (int i = 0; i < attributeMap.getLength(); i++) {
attributesStr.append(" ");
Node attr = attributeMap.item(i);
String attrName = attr.getNodeName();
String attrValue = attr.getNodeValue();
attributesStr.append(attrName);
attributesStr.append("=");
attributesStr.append("\"" + attrValue + "\"");
}
return attributesStr.toString();
}
这个代码输出的是标准xml文档,楼主可以试试。
response.getWriter().write(content);content就是你要输出的东西:比如 字符串什么的!也可以拼html这个例子是输出pdf,你也可以输出text,html等,这个你可以查查!
不是页面请求,但是输出到页面?什么情况啊?用socket,让浏览器访问你的ip可以不?
不可以的话,你就输出到一个文件,exec它好了~~
这个是解析XML的类的方法
import java.io.File;
import java.lang.reflect.Method;
import java.util.Iterator;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class AnalysisPageXmlObject {
public Object getPageTips(String pagename ,String language){
Object obj = new Object();
try {
File is = new File(this.getClass().getResource("/").getPath());
is = new File(is.getPath() + "/com/maxtie/mmis/util/pagetags.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(is);
Element root = doc.getRootElement();
Iterator rs = root.elementIterator("pagename");
while(rs.hasNext()){
Element foo= (Element)rs.next();
if(foo.attributeValue("name").equalsIgnoreCase(pagename)){
String classpath = foo.attributeValue("class");
Class c = Class.forName(classpath);
Class types[] = new Class[1];
obj = c.newInstance();
Iterator rs1 = foo.elementIterator("tagsname");
while(rs1.hasNext()){
Element foo1= (Element)rs1.next();
types[0] = Class.forName("java.lang.String");
StringBuffer med_name = new StringBuffer("set");
String tags_name = foo1.attributeValue("name");
med_name.append(tags_name.substring(0, 1).toUpperCase());
med_name.append(tags_name.substring(1));
Method method = c.getMethod(med_name.toString(), types);
Iterator rs2 = foo1.elementIterator("value");
String tags_value="";
while(rs2.hasNext()){
Element foo2= (Element)rs2.next();
if(foo2.attributeValue("language").equalsIgnoreCase(language)){
tags_value=foo2.getText();
}
}
method.invoke(obj, tags_value);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
return obj;
}
}
}
这个是缓存的类,实现对查找出来的对象的缓存
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class AnalysisPageXml {
private static Map map=new HashMap();
public AnalysisPageXml(){
if(map.isEmpty()){
try {
File is = new File(this.getClass().getResource("/").getPath());
is = new File(is.getPath() + "/com/mmis/util/pagetags.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(is);
Element root = doc.getRootElement();
Iterator rs = root.elementIterator("pagename");
while(rs.hasNext()){
List list=new ArrayList();
Element foo= (Element)rs.next();
String aa="";
aa=(String)foo.attributeValue("name");
map.put(aa,list);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
}
}
}
String[] lan=new String[]{"ch","en","ko","fr","ge","sp","ar","jp","ru"};
public Object getPageTips(String pagename ,String languag){
/* String language=(request.getParameter("language")==null)?"ch":request.getParameter("language");
String[] languages={"ch","jp","en","ko","ge","ru","fr","sp"};
for(int i=0;i<languages.length;i++){
if(language){
}
}*/
String language=languag!=null?languag:"ch";
String[] languages={"ch","jp","en","ko","ge","ru","fr","sp","ar"};
boolean languageBoolean=false;
for(int i=0;i<languages.length;i++){
if(language.equals(languages[i])){
languageBoolean=true;
}
}
if(!languageBoolean){
language="ch";
}
Object ob=null;
Set set=map.keySet();
Iterator rss=set.iterator();
while(rss.hasNext()){
String a=(String)rss.next();
List list=(List)map.get(a);
if(a.equals(pagename)){
if(list.isEmpty()){
for(int i=0;i<lan.length;i++){
TagsBean TagsBean=new TagsBean();
TagsBean.setTagsLanguage(lan[i]);
list.add(TagsBean);
}
for(int i=0;i<list.size();i++){
TagsBean TagsBean=(TagsBean)list.get(i);
if(TagsBean.getTagsLanguage().equals(language)){
AnalysisPageXmlObject AnalysisPageXmlObject=new AnalysisPageXmlObject();
ob=AnalysisPageXmlObject.getPageTips(pagename, language);
TagsBean.setObj(ob);
}
}
map.put(pagename, list);
}else{
for(int i=0;i<list.size();i++){
TagsBean TagsBean=(TagsBean)list.get(i);
if(TagsBean.getTagsLanguage().equals(language)){
if(TagsBean.getObj()!=null){
ob=TagsBean.getObj();
}else{
AnalysisPageXmlObject AnalysisPageXmlObject=new AnalysisPageXmlObject();
ob=AnalysisPageXmlObject.getPageTips(pagename, language);
TagsBean.setObj(ob);
}
}
}
map.put(pagename, list);
}
}
}
return ob;
}
}
这个是缓存对象的类
public class TagsBean {
private String tagsLanguage;
private Object obj;
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public String getTagsLanguage() {
return tagsLanguage;
}
public void setTagsLanguage(String tagsLanguage) {
this.tagsLanguage = tagsLanguage;
}
}
这个是上面用反射调用的对象啊
public class RegisterPageTagsBean { //===============================页面标签===========================================
private String welcometags;//欢迎语句
public String getWelcometags() {
return welcometags;
}
public void setWelcometags(String welcometags) {
this.welcometags = welcometags;
}
}
这个是XML
<?xml version="1.0" encoding="UTF-8"?> <pagetags> <!--==============注册标签===============-->
<pagename name="registerTags" class="com.page.tagsstips.RegisterPageTagsBean">
<tagsname name="welcometags">
<value language="ch">欢迎您加入中国发展门户网国际发展名录!</value >
<value language="en">Welcome to International Development Directory.</value >
<value language="fr">Bienvenu à adhésion au Répertoire International du Développement </value >
<value language="ge">Willkommen beim Firmenverzeichnis für Internationale Entwicklung! </value >
<value language="jp">国際発展ディレクトリへようこそ!</value >
<value language="ko">????????? ????? ?????.</value >
<value language="ru">Приветствуем вспупить в Каталог Международного Развития! </value >
<value language="sp">?Bienvenido al Directorio del Desarrollo Internacional! </value >
<value language="ar"> ????? ?????? ???? ??????? ???????</value >
</tagsname>
</pagename>
</pagetags> 利用反射机制封装一个对象啊,前台调用就可以了啊中间的类实现了缓存啊,不知道我这样写你明白没,前台JSP这样写啊:
AnalysisPageXml AnalysisPageXml=new AnalysisPageXml();
RegisterPageTagsBean RegisterPageTagsBean=(RegisterPageTagsBean)AnalysisPageXml.getPageTips("registerTags",language);
RegisterPageTagsBean.getWelcometags()//这样就可以得到里面的属性了,你明白了吗?