XMLメモ
DOM解析原理:一度にxmlドキュメントをDockmentツリーにロードし、Dockmentオブジェクトを介してノードオブジェクトを得て、ノードオブジェクトを介してxmlドキュメントの内容(ラベル、属性、テキスト、コメント)にアクセスします。短所:大容量のxmlファイルを読み込むのに適していないので、メモリが溢れてしまいます。
xmlオブジェクトのいくつかの方法:
素早く取得するために必要なノードオブジェクト
xmlオブジェクトのいくつかの方法:
:
Iterator Element.nodeIterator(); //
:
Element Document.getRootElement(); // xml
Element ELement.element(" ") //
Iterator Element.elementIterator(" ");//
List Element.elements(); //
:
String Element.attributeValue(" ") //
Attribute Element.attribute(" ");//
Attribute.getName() //
Attibute.getValue() //
List Element.attributes(); //
Iterator Element.attibuteIterator(); //
:
Element.getText(); //
Element.setText(); //
Element.elementText(" ") //
xml読みだし(調べ) public static void main(String[] args) throws Exception{
List list = new ArrayList();
// xml
SAXReader reader = new SAXReader();
Document doc = reader.read(new File("./src/contact.xml"));
// xml
Iterator it = doc.getRootElement().elementIterator("contact");
while(it.hasNext()){
Element elem = it.next();
// Contact,
Contact contact = new Contact();
contact.setId(elem.attributeValue("id"));
contact.setName(elem.elementText("name"));
contact.setPhone(elem.elementText("phone"));
contact.setEmail(elem.elementText("email"));
list.add(contact);
}
//
for (Contact contact : list) {
System.out.println(contact);
}
}
xmlの添削 1 xml
XMLWriter writer = new XMLWriter(OutputStream, OutputForamt)
wirter.write(Document);
2 xml API
:
DocumentHelper.createDocument()
addElement(" ")
addAttribute(" ",“ ”)
:
Attribute.setValue(" ")
Element.addAtribute(" "," ")
Element.setText(" ")
Element.detach();
Attribute.detach();
public void fun() throws Exception{
//1. doc
//2. ,
//3. xml
//4.
// doc xml
// Document
// Document doc = DocumentHelper.createDocument();
//
// Element rootElem = doc.addElement("students");
//
// addStudent(rootElem,"1"," "," "," 1 "," ");
// addStudent(rootElem,"2"," "," "," 2 "," ");
// addStudent(rootElem,"3"," "," "," 3 "," ");
// id 2 " "
// xml
// SAXReader reader = new SAXReader();
// Document doc= reader.read("E:/student.xml");
//
// Element rootElem = doc.getRootElement();
// List stuElems= rootElem.elements();
// id 2 student
// for (Object object : stuElems) {
// Element stuElem = (Element)object;
// // student id
// if(stuElem.attribute("id").getValue().equals("2")){
// student name
// stuElem.element("name").setText(" ");
// }
// }
// id 2
// xml
SAXReader reader = new SAXReader();
Document doc= reader.read("E:/student.xml");
Element rootElem = doc.getRootElement();
List stuElems= rootElem.elements();
// id 2 student
for (Object object : stuElems) {
Element stuElem = (Element)object;
// id 2 student
if(stuElem.attribute("id").getValue().equals("2")){
// id 2
stuElem.detach();
}
}
// OutputFormat
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
// XMLWriter xml
XMLWriter writer = new XMLWriter(new FileOutputStream("E:/student.xml"),format);
// wirte() xml
writer.write(doc);
//
writer.close();
}
public void addStudent(Element elem,String id,String name,String gender,String grade,String address){
Element stu = elem.addElement("student");
stu.addAttribute("id", id);
Element nameElem = stu.addElement("name");
nameElem.setText(name);
stu.addElement("gender").setText(gender);
stu.addElement("grade").setText(grade);
stu.addElement("address").setText(address);
}
xpath技術素早く取得するために必要なノードオブジェクト
xpath
List selectNodes("xpath ");
Node selectSingleNode("xpath ");
3.4 xPath
/ xml ( )
// 。
*
[]
@
and ( &&)
text()
xml–SAX解析1. SAXParser
SAXParser parser=SAXParserFactory.newInstance().newSAXParser();
2. parse
parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());
[ class (extends DefaultHandler)
DefaultHandler API:
void startDocument() :
void endDocument() :
void startElement(String uri, String localName, String qName, Attributes attributes) :
void endElement(String uri, String localName, String qName) :
void characters(char[] ch, int start, int length) :
dom解析とSAX解析の違い ============DOM vs SAX ========
DOM SAX
: xml , : , , 。
DOM SAX
DOM , SAX , ,
DOM (Node,Element,Attribute) SAX
DMD制約1) dtd
]>
:
:
2)DTD
:
: EMPTY。 。
: (#PCDATA)。 ( )。
: ANY。 ( )
( ):
:
:
:
: 1 。
+ : 1
* : 0 n 。
? : 0 1 。
:
#REQUIRED
#IMPLIED
#FIXED value ,
:
CDATA :
(en1|en2|..):
ID: xml 。