这是我编写xml文件的代码:
public void generateDocument(){
Document document = DocumentHelper.createDocument();
Element catalogElement = document.addElement("catalog");
catalogElement.addComment("An XML Catalog");
catalogElement.addProcessingInstruction("target","text");
Element journalElement = catalogElement.addElement("journal");
journalElement.addAttribute("title", "XML Zone");
journalElement.addAttribute("publisher", "IBM developerWorks");
Element articleElement=journalElement.addElement("article");
articleElement.addAttribute("level", "Intermediate");
articleElement.addAttribute("date", "December-2001");
Element titleElement=articleElement.addElement("title");
titleElement.setText("Java configuration with XML Schema");
Element authorElement=articleElement.addElement("author");
Element firstNameElement=authorElement.addElement("firstname");
firstNameElement.setText("Marcello");
Element lastNameElement=authorElement.addElement("lastname");
lastNameElement.setText("Vitaletti");
//pass this xml document
DTDGenerator dtd=new DTDGenerator(document,"catalog.dtd");
document.addDocType("catalog",
null,"catalog.dtd");
try{
XMLWriter output = new XMLWriter(
new FileWriter( new File("catalog.xml") ));
output.write( document );
output.close();
}
catch(IOException e){System.out.println(e.getMessage());}
}
我的阅读代码是:
public static void modifyDocument(File inputXml){
try{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inputXml);
List list = document.selectNodes("//article/@level" );
Iterator iter=list.iterator();
while(iter.hasNext()){
Attribute attribute=(Attribute)iter.next();
if(attribute.getValue().equals("Intermediate"))
attribute.setValue("Introductory");
}
list = document.selectNodes("//article/@date" );
iter=list.iterator();
while(iter.hasNext()){
Attribute attribute=(Attribute)iter.next();
if(attribute.getValue().equals("December-2001"))
attribute.setValue("October-2002");
}
list = document.selectNodes("//article" );
iter=list.iterator();
while(iter.hasNext()){
Element element=(Element)iter.next();
Iterator iterator=element.elementIterator("title");
while(iterator.hasNext()){
Element titleElement=(Element)iterator.next();
if(titleElement.getText().equals("Java configuration with XML Schema"))
titleElement.setText("Create flexible and extensible XML schema");
}
}
list = document.selectNodes("//article/author" );
iter=list.iterator();
while(iter.hasNext()){
Element element=(Element)iter.next();
Iterator iterator=element.elementIterator("firstname");
while(iterator.hasNext()){
Element firstNameElement=(Element)iterator.next();
if(firstNameElement.getText().equals("Marcello"))
firstNameElement.setText("Ayesha");
}
}
list = document.selectNodes("//article/author" );
iter=list.iterator();
while(iter.hasNext()){
Element element=(Element)iter.next();
Iterator iterator=element.elementIterator("lastname");
while(iterator.hasNext()){
Element lastNameElement=(Element)iterator.next();
if(lastNameElement.getText().equals("Vitaletti"))
lastNameElement.setText("Malik");
}
}
XMLWriter output = new XMLWriter(
new FileWriter( new File("catalog-modified.xml") ));
output.write( document );
output.close();
}
catch(DocumentException e)
{
System.out.println(e.getMessage());
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
我正在使用dom4j库并且还借助DTDGenerator从我创建的xml生成dtd文件。写作部分的一切都很好。但是读书正在诅咒我。我相信我的DTD有问题..但我的输出dtd看起来相当令人印象深刻..但没有帮助阅读xml :( .. 我的Dtd输出:
<!ELEMENT article ( title, author ) >
<!ATTLIST article date NMTOKEN #REQUIRED >
<!ATTLIST article level NMTOKEN #REQUIRED >
<!ELEMENT author ( firstname, lastname ) >
<!ELEMENT catalog ( journal ) >
<!ELEMENT firstname ( #PCDATA ) >
<!ELEMENT journal ( article ) >
<!ATTLIST journal publisher CDATA #REQUIRED >
<!ATTLIST journal title CDATA #REQUIRED >
<!ELEMENT lastname ( #PCDATA ) >
<!ELEMENT title ( #PCDATA ) >
我的Xml文件是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
-<catalog>
<!--An XML Catalog-->
<?target text?>
-<journal title="XML Zone" publisher="IBM developerWorks">-<article date="December-2001" level="Intermediate"><title>Java configuration with XML Schema</title>-<author><firstname>Marcello</firstname><lastname>Vitaletti</lastname></author></article></journal></catalog>
,错误是:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
at com.xmlsample.XMLSampleRead.modifyDocument(XMLSampleRead.java:35)
at com.xmlsample.XMLSampleRead.main(XMLSampleRead.java:24)
Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 5 more
答案 0 :(得分:0)
这与您的DTD无关。您需要在类路径中包含jaxen。 Jaxen是dom4j在评估xpath表达式时内部使用的xpath引擎。 Jaxen是dom4j发行版的一部分。