java dom读写xml文件_用DOM读写XML文件

package testxml.TestDOM;

import java.io.File;

import java.io.IOException;

import java.util.Calendar;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Attr;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.w3c.dom.Text;

import org.xml.sax.SAXException;

public class TestDOM {

public static void main(String[] args)

{

TestDOM dom = new TestDOM();

}

public TestDOM()

{

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setNamespaceAware(true);

factory.setIgnoringElementContentWhitespace(true);

DocumentBuilder builder = null;

try {

builder = factory.newDocumentBuilder();

} catch (ParserConfigurationException ex) {

Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);

}

String path = this.getClass().getResource("/testxml/TestDOM/Link.xml").getFile();

File f = new File(path);

Document document = null;

try {

document = builder.parse(f);

document.normalize();

} catch (SAXException ex) {

Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);

} catch (IOException ex) {

Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);

}

Element root = document.getDocumentElement(); //links

System.out.println("::"+root.getNodeName());

//writeXML(document,f); //写XML文件

//调试getFirstChild() getNextSibling()方法、文本对象

// System.out.println(root.getFirstChild().getFirstChild().getFirstChild().getNodeValue());

// Text t = (Text)root.getFirstChild().getLastChild().getFirstChild();

// System.out.println(t.getParentNode().getPreviousSibling().getFirstChild().getNextSibling().getFirstChild().getNodeValue());

//遍历所有节点1

//readChildNodesShow(root);

//遍历所有节点2

readSiblingShow(root);

//递归方式1

//recurChildNodesShow(root);

//递归方式2

//recurSiblingShow(root);

}

//得到节点属性

public void getAttribute(Node node)

{

NamedNodeMap nodeMap = node.getAttributes(); //links得到属性

for(int i=0;i < nodeMap.getLength();i++)

{

System.out.println("::"+nodeMap.item(i));

}

System.out.println();

}

//普通读XML1

public void readChildNodesShow(Node node)

{

NodeList linkList = node.getChildNodes(); //link集合

System.out.println("linkList大小:"+linkList.getLength());

for(int i =0;i< linkList.getLength();i++)

{

Element link = (Element)linkList.item(i); //link

System.out.println("::"+link.getNodeName());

NodeList elemList = link.getChildNodes(); //elem集合

for(int j = 0;j < elemList.getLength();j++)

{

Element elem = (Element)elemList.item(j); //elem

if(!(elem.getFirstChild() instanceof Text))

{

NodeList elemList1 = elem.getChildNodes();

for(int k = 0;k < elemList1.getLength();k++)

{

Element elem1 = (Element)elemList1.item(k);

System.out.print("::");

System.out.println(elem1.getTextContent());

}

}

else

{

System.out.print("::");

System.out.println(elem.getTextContent());

}

}

System.out.println();

}

}

//普通读XML2

public void readSiblingShow(Node node)

{

for(Node node0 = node.getFirstChild();node0 !=null;node0 = node0.getNextSibling() )

{

Element link = (Element)node0;

System.out.print("::");

System.out.println(link.getTextContent());

for(Node node1 = link.getFirstChild();node1!=null;node1 = node1.getNextSibling())

{

Element elem = (Element)node1;

if(!(elem.getFirstChild() instanceof Text))

{

for(Node node2 = elem.getFirstChild();node2!=null;node2 = node2.getNextSibling())

{

Element elem1 = (Element)node2;

System.out.print("::");

System.out.println(elem1.getTextContent());

}

}

System.out.print("::");

System.out.println(elem.getTextContent());

}

System.out.println();

}

}

//递归读XML1

public void recurChildNodesShow(Node node)

{

System.out.print("");

System.out.println(node.getTextContent());

int i;

if(!(node.getFirstChild() instanceof Text))

{

NodeList elemList = node.getChildNodes();

for(i =0 ;i < elemList.getLength();i++)

{

recurChildNodesShow(elemList.item(i));

}

System.out.println();

}

}

//递归读XML2

public void recurSiblingShow(Node node)

{

System.out.print("");

System.out.println(node.getTextContent());

if(!(node.getFirstChild() instanceof Text))

{

for(Node temp = node.getFirstChild();temp!=null;temp = temp.getNextSibling())

{

recurSiblingShow(temp);

}

System.out.println();

}

}

//写XML

public void writeXML(Document doc,File f)

{

String text = "xuemei";

String url = "http://mxdxm.iteye.com";

String author = "maxin";

String description = "maxin is xuemei";

Element link = doc.createElement("link");

Element linktext = doc.createElement("text");

Text textseg = doc.createTextNode(text);

//textseg.setData("maxin"); //创建完text之后,才能设值。

linktext.appendChild(textseg);

//linktext.getFirstChild().setNodeValue("mei");//创建完text之后,才能设值。

Element linkurl = doc.createElement("url");

Text urlseg = doc.createTextNode(url);

linkurl.appendChild(urlseg);

Attr urlattr = doc.createAttribute("newWindow"); //创建属性

Text attrseg = doc.createTextNode("No");

urlattr.setNodeValue(attrseg.getNodeValue());

linkurl.setAttributeNode(urlattr);

Element linkauthor = doc.createElement("author");

Text authorseg = doc.createTextNode(author);

linkauthor.appendChild(authorseg);

Calendar currentTime = Calendar.getInstance();

String day = Integer.toString(currentTime.get(Calendar.DAY_OF_MONTH)); //13

String month = Integer.toString(currentTime.get(Calendar.MONTH)); //2

String year = Integer.toString(currentTime.get(Calendar.YEAR)); //1

Element linkdate = doc.createElement("date");

Element dateday = doc.createElement("day");

Text dayseg = doc.createTextNode(day);

dateday.appendChild(dayseg);

Element datemonth = doc.createElement("month");

Text monthseg = doc.createTextNode(month);

datemonth.appendChild(monthseg);

Element dateyear = doc.createElement("year");

Text yearseg = doc.createTextNode(year);

dateyear.appendChild(yearseg);

linkdate.appendChild(dateday);

linkdate.appendChild(datemonth);

linkdate.appendChild(dateyear);

Element linkdes = doc.createElement("description");

Text desseg = doc.createTextNode(description);

linkdes.appendChild(desseg);

Attr linkattr = doc.createAttribute("name");

linkattr.setNodeValue("4");

link.setAttributeNode(linkattr);

link.appendChild(linktext);

link.appendChild(linkurl);

link.appendChild(linkauthor);

link.appendChild(linkdate);

link.appendChild(linkdes);

Element root = (Element)doc.getDocumentElement();

root.appendChild(link);

TransformerFactory tFactory = TransformerFactory.newInstance();

try {

Transformer transformer = tFactory.newTransformer();

DOMSource source = new DOMSource(doc);

StreamResult result = new StreamResult(f);

transformer.transform(source, result);

} catch (TransformerConfigurationException ex) {

Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);

} catch (TransformerException ex) {

Logger.getLogger(TestDOM.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

XML文件和DTD文件的存放的本地目录为:F:\Document\java\maxin\src\testxml\TestDOM\LinkDTD.dtd

XML文件和DTD文件存放在下面的附件中:

下载次数: 7

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-08-13 20:19

浏览 1201

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Java HTTP接收XML参数,可以使用Java内置的XML解析库(比如DOM、SAX、JAXB等)来解析XML数据,然后将解析后的数据传递给接口进行处理。下面是一个示例代码,演示如何读写XML并使用XML文件进行参数传递给接口获取返回内容,以wishPost请求物流单号为例: 1. 首先需要引入相关的依赖包,比如dom4j、jackson等: ``` <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.4</version> </dependency> ``` 2. 然后定义一个XML工具类,用于取和写入XML文件。这里使用dom4j库实现: ``` public class XmlUtil { /** * XML文件 * @param fileName 文件名 * @return Document对象 * @throws Exception */ public static Document readXml(String fileName) throws Exception { SAXReader reader = new SAXReader(); Document document = reader.read(new File(fileName)); return document; } /** * 写入XML文件 * @param fileName 文件名 * @param document Document对象 * @throws Exception */ public static void writeXml(String fileName, Document document) throws Exception { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = new XMLWriter(new FileOutputStream(fileName), format); writer.write(document); writer.close(); } } ``` 3. 接下来定义一个物流接口类,用于发送请求并获取返回结果。这里使用Java原生的HttpURLConnection实现: ``` public class WishLogisticsApi { private String apiUrl = "https://china-fulfillment.wish.com/api/v1/order/get-fulfillment-detail"; /** * 获取物流信息 * @param trackingNumber 物流单号 * @param accessToken 接口访问令牌 * @return 物流信息JSON字符串 * @throws Exception */ public String getLogisticsInfo(String trackingNumber, String accessToken) throws Exception { // 构造请求参数 Map<String, Object> params = new HashMap<>(); params.put("tracking_number", trackingNumber); // 构造请求头 Map<String, String> headers = new HashMap<>(); headers.put("Authorization", "Bearer " + accessToken); // 发送请求 String response = HttpUtil.post(apiUrl, params, headers); return response; } } ``` 4. 最后,编写一个测试类,演示如何使用上述工具类和接口类实现物流单号查询: ``` public class WishLogisticsTest { private static String accessToken = "YOUR_ACCESS_TOKEN"; private static String xmlFile = "logistics.xml"; public static void main(String[] args) throws Exception { // XML文件 Document document = XmlUtil.readXml(xmlFile); // 获取物流单号 Element trackingNumberElement = (Element) document.selectSingleNode("//order/fulfillment/tracking_number"); String trackingNumber = trackingNumberElement.getText(); // 调用接口获取物流信息 WishLogisticsApi api = new WishLogisticsApi(); String logisticsInfo = api.getLogisticsInfo(trackingNumber, accessToken); // 将返回结果写入XML文件 ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = objectMapper.readTree(logisticsInfo); String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode); document.selectSingleNode("//order/fulfillment").setText(json); XmlUtil.writeXml(xmlFile, document); // 输出物流信息 System.out.println(json); } } ``` 以上代码演示了如何读写XML并使用XML文件进行参数传递给接口获取返回内容。实际应用中,可以根据具体业务需求进行适当修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值