<map>
<entry>
<key>name</key>
<value>Bob</value>
</entry>
<entry>
<key>age</key>
<value>20</value>
</entry>
<list>
<item>One</item>
<item>Two</item>
<item>Three</item>
</list>
</map>
上面的XML文件,表明了一个Map中包含一个键-值对(name-Bob)和一个List(One, Two, Three)。希望这对你有帮助。
在xml中定义查询的list集合的泛型可以在XML中使用resultMap标签,并指定collection属性,指定泛型类型。根据查询相关资料信息显示,resultMap标签允许开发人员指定泛型类型,以实现更少的重复代码,更好的可读性和更简洁的XML映射文件。这是一个用JAVA W3C DOM 进行XML *** 作的例子,包含了查询、增加、修改、删除、保存的基本 *** 作。较完整的描述了一个XML的整个 *** 作流程。适合刚入门JAVA XML *** 作的朋友参考和学习。假设有XML文件:test1.xml
<?xml version="1.0" encoding="GBK"?>
<books>
<book>
<name>哈里波特</name>
<price>10</price>
<memo>这是一本很好看的书。</memo>
</book>
<book id="B02">
<name>三国演义</name>
<price>10</price>
<memo>四大名著之一。</memo>
</book>
<book id="B03">
<name>水浒</name>
<price>6</price>
<memo>四大名著之一。</memo>
</book>
<book id="B04">
<name>红楼</name>
<price>5</price>
<memo>四大名著之一。</memo>
</book>
</books>
下面是为Test.java
import java.io.File
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import org.w3c.dom.*
import org.xml.sax.SAXException
import javax.xml.parsers.*
import javax.xml.transform.*
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.*
import javax.xml.xpath.*
public class Test {
public static void main(String[] args) {
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance()
Element theBook=null, theElem=null, root=null
try {
factory.setIgnoringElementContentWhitespace(true)
DocumentBuilder db=factory.newDocumentBuilder()
Document xmldoc=db.parse(new File("Test1.xml"))
root=xmldoc.getDocumentElement()
//--- 新建一本书开始 ----
theBook=xmldoc.createElement("book")
theElem=xmldoc.createElement("name")
theElem.setTextContent("新书")
theBook.appendChild(theElem)
theElem=xmldoc.createElement("price")
theElem.setTextContent("20")
theBook.appendChild(theElem)
theElem=xmldoc.createElement("memo")
theElem.setTextContent("新书的更好看。")
theBook.appendChild(theElem)
root.appendChild(theBook)
System.out.println("--- 新建一本书开始 ----")
output(xmldoc)
//--- 新建一本书完成 ----
//--- 下面对《哈里波特》做一些修改。 ----
//--- 查询找《哈里波特》----
theBook=(Element) selectSingleNode("/books/book[name='哈里波特']", root)
System.out.println("--- 查询找《哈里波特》 ----")
output(theBook)
//--- 此时修改这本书的价格 -----
theBook.getElementsByTagName("price").item(0).setTextContent("15")//getElementsByTagName返回的是NodeList,所以要跟上item(0)。另外,getElementsByTagName("price")相当于xpath的".//price"。
System.out.println("--- 此时修改这本书的价格 ----")
output(theBook)
//--- 另外还想加一个属性id,值为B01 ----
theBook.setAttribute("id", "B01")
System.out.println("--- 另外还想加一个属性id,值为B01 ----")
output(theBook)
//--- 对《哈里波特》修改完成。 ----
//--- 要用id属性删除《三国演义》这本书 ----
theBook=(Element) selectSingleNode("/books/book[@id='B02']", root)
System.out.println("--- 要用id属性删除《三国演义》这本书 ----")
output(theBook)
theBook.getParentNode().removeChild(theBook)
System.out.println("--- 删除后的XML ----")
output(xmldoc)
//--- 再将所有价格低于10的书删除 ----
NodeList someBooks=selectNodes("/books/book[price<10]", root)
System.out.println("--- 再将所有价格低于10的书删除 ---")
System.out.println("--- 符合条件的书有 "+someBooks.getLength()+"本。 ---")
for(int i=0i<someBooks.getLength()i++) {
someBooks.item(i).getParentNode().removeChild(someBooks.item(i))
}
output(xmldoc)
saveXml("Test1_Edited.xml", xmldoc)
} catch (ParserConfigurationException e) {
e.printStackTrace()
} catch (SAXException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}
}
public static void output(Node node) {//将node的XML字符串输出到控制台
TransformerFactory transFactory=TransformerFactory.newInstance()
try {
Transformer transformer = transFactory.newTransformer()
transformer.setOutputProperty("encoding", "gb2312")
transformer.setOutputProperty("indent", "yes")
DOMSource source=new DOMSource()
source.setNode(node)
StreamResult result=new StreamResult()
result.setOutputStream(System.out)
transformer.transform(source, result)
} catch (TransformerConfigurationException e) {
e.printStackTrace()
} catch (TransformerException e) {
e.printStackTrace()
}
}
public static Node selectSingleNode(String express, Object source) {//查找节点,并返回第一个符合条件节点
Node result=null
XPathFactory xpathFactory=XPathFactory.newInstance()
XPath xpath=xpathFactory.newXPath()
try {
result=(Node) xpath.evaluate(express, source, XPathConstants.NODE)
} catch (XPathExpressionException e) {
e.printStackTrace()
}
return result
}
public static NodeList selectNodes(String express, Object source) {//查找节点,返回符合条件的节点集。
NodeList result=null
XPathFactory xpathFactory=XPathFactory.newInstance()
XPath xpath=xpathFactory.newXPath()
try {
result=(NodeList) xpath.evaluate(express, source, XPathConstants.NODESET)
} catch (XPathExpressionException e) {
e.printStackTrace()
}
return result
}
public static void saveXml(String fileName, Document doc) {//将Document输出到文件
TransformerFactory transFactory=TransformerFactory.newInstance()
try {
Transformer transformer = transFactory.newTransformer()
transformer.setOutputProperty("indent", "yes")
DOMSource source=new DOMSource()
source.setNode(doc)
StreamResult result=new StreamResult()
result.setOutputStream(new FileOutputStream(fileName))
transformer.transform(source, result)
} catch (TransformerConfigurationException e) {
e.printStackTrace()
} catch (TransformerException e) {
e.printStackTrace()
} catch (FileNotFoundException e) {
e.printStackTrace()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)