qq_三年_31
仔细检查一下bookstore.appendChild();
qq_三年_31
有图吗
qq_雨欲语_03900761
自问自答,
张禹专
原因:显示红色感叹号是因为jar包的路径不对
解决:在项目上右击Build Path -> Configure Build Paht...(或Propertise->Java Build Path),在Java Build Path中Libraries,红色叉号的包为路径错误的包。
处理好后返回刷新工程即可,这个问题一般是导入别人的项目或之前的一些JAR包移动了它的存储位置。
工程上黄色盾牌感叹号,表示有引用了jar包,但是实际上没有使用这个jar包(可以理解为定义了变量,但从未来使用过)
但是这个不是我碰到的原因,我的Java Build Path中Libraries没有出现红色叉号的包。
慕粉3914370
不是插件, 自己设置代码提示
阿路
兮蓅
程序运行后效果是:控制台没有报错,没有输出,在该java项目下JRE System Libraries下没有创建出代码中books1.xml文件。
wshyzx
换不换行你只能翻它源码了,实际开发一般都是xml解析,我到现在还没碰到写入的需求,真用到写入的时候也是dom4j,有个设置输出的格式的类,可以指定输出格式、缩进什么的,说了一堆没啥用,解决不了问题,建议dom4j吧
wshyzx
左下角有个 design 和source 这个是用来切换视图的
心中的愤怒就像龙咆哮
这是工厂类,设计模式中的工厂模式
qq_张玉琪_0
不知道。不过头和内容是一个整体,去了头就不完整了。而且我觉得头并不会对你要执行的操作有任何影响吧。
glasses0
应该是不能产生两次根节点
Element book = bookstore.addElement("book");
刃殇
输出流OutputStream()构造参数本身就有Sting、跟File 两类,其都可以直接创建文件没啥区别;
如果你只是想单纯的生成文件那直接传一个文件路径进去,或者new StreamResult(new file(" "));一次性的
如果希望在之后可以对文件进行操作,比如删除判断,就可以新建一个FIle f =new File(" ");
lucitas
可以批量设置标签,不用一个个去写,并且使用对象操作xml文件可以对已生成的xml文件进行添加或者删除标签
慕村8785123
因为你有的地方,快进的看了。
天影
确实难以兼得。对于第一行,只有设置显示Standalone才能保证换行,不显示就无法换行,与“yes”or “no”无关。如果你有新的理解,记得@我
好鬼过瘾
风鹤子
飞了的人
可以使用DOM、JDOM和SAX方式向一个已经存在的XML文件中追加内容,SAX方式比较复杂。例如:原来的XML文件是:
<?xml version = "1.0" encoding = "utf-8"?> <bookstore> <book id="1"> <name>冰与火之歌</name> <author>乔治马丁</author> <year>2014</year> <price>89</price> </book> <book id="2"> <name>安徒生童话</name> <year>2004</year> <price>77</price> <language>English</language> </book> </bookstore>
我们要向第一个book节点的最后添加一个language节点:
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>冰与火之歌</name> <author>乔治马丁</author> <year>2014</year> <price>89</price> <language>简体中文</language> </book> <book id="2"> <name>安徒生童话</name> <year>2004</year> <price>77</price> <language>English</language> </book> </bookstore>
基本思路是先解析到适当的位置再进行插入:
DOM方式:
private static void appendXMLByDOM() throws ParserConfigurationException,
TransformerException, SAXException, IOException {
// 1.创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 2.根据DocumentBuilderFactory对象创建一个DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
// 3.使用DocumentBuilder对象的parse()方法返回一个Document对象(DOM树)
Document document = db.parse("books1.xml");
document.setXmlStandalone(true);// 设置XML文件的声明standalone的值为yes并不予显示
// 4.追加节点
Node book = document.getElementsByTagName("book").item(0);// 得到第一个book节点
Element language = document.createElement("language");
language.setTextContent("简体中文");
book.appendChild(language);
// 5.创建一个TransformerFactory对象
TransformerFactory tff = TransformerFactory.newInstance();
// 6.通过TransformerFactory对象创建一个Transformer对象
Transformer tf = tff.newTransformer();
// 7.利用Transformer对象的transform方法指定输出流
tf.setOutputProperty(OutputKeys.INDENT, "yes");// 设置缩进、换行
tf.transform(new DOMSource(document), new StreamResult(new File(
"books_append_dom.xml")));
}JDOM方式:
public static void appendXMLByJDOM() {
// 1.创建一个SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
InputStream in;
try {
// 2.创建一个输入流,将xml文件加载到输入流
in = new FileInputStream("books1.xml");
// 3.通过SAXBuilder的build方法将输入流加载到SAXBuilder中
Document document = saxBuilder.build(in);
// 4.通过Document对象获取xml文件的根节点
Element rootElement = document.getRootElement();
// 5.根据根节点获取子节点的List集合
List<Element> bookList = rootElement.getChildren();
// 6.追加节点
Element language = new Element("language");
language.setText("简体中文");
bookList.get(0).addContent(language);
// 7.设置输出流和输出格式
Format format = Format.getCompactFormat();
format.setEncoding("gb2312");//设置编码方式为gb2312
format.setIndent(" ");//设置缩进(此处为一个tab键)
XMLOutputter outputter = new XMLOutputter(format);
outputter.output(document, new FileOutputStream("books_append_jdom.xml"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}DOM4J方式:
public static void appendXMLByDOM4J() throws IOException {
// 1.创建一个SAXReader对象reader
SAXReader reader = new SAXReader();
try {
// 2.通过reader对象的read方法加载xml文件,获取Document对象
Document document = reader.read(new File("books1.xml"));
Element bookStore = document.getRootElement();// 通过document对象获取根节点bookstore
Element book = bookStore.element("book");
Element language = book.addElement("language");
language.setText("简体中文");
// 3.设置输出格式和输出流
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream(
"books_append_dom4j.xml"), format);
writer.write(document);// 将文档写入到输出流
writer.close();
} catch (DocumentException e) {
e.printStackTrace();
}
} 其中DOM4J方式是最简单的,推荐使用这种方式。
文人骚客2077
至于通过代码增加结点,可以参照:http://www.imooc.com/qadetail/66706