w3c dom创建xml

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 testRequestElement {
	
    public static void main(String[] args) {    
    	
    createRequest("测试","ziyuan","read");	   
    	         
    }

    public static Element createRequest(String userRole,
    		String resourceId,
    		String actionId)
    {
       
    	//实例化解析器
 	   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 	   DocumentBuilder builder = null;
		try {
			builder = factory.newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 	   //创建Document对象
 	   Document doc = builder.newDocument();

 	   //request
 	   Element request = doc.createElement("Request");
 	   request.setAttribute("xmlns", 
 			   "urn:oasis:names:tc:xacml:2.0:context:schema:os");
 	   request.setAttribute("xmlns:xsi", 
 			   "http://www.w3.org/2001/XMLSchema-instance");
 	   request.setAttribute("xsi:schemaLocation", 
 			   "urn:oasis:names:tc:xacml:2.0:context:schema:os xacml-2.0-context.xsd");
 	   
 	   //subject
 	   Element subject = doc.createElement("Subject");
 	   Element attributeSubject = doc.createElement("Attribute");
 	   Element attributeSubjectValue = doc.createElement("AttributeValue");
 	   attributeSubject.setAttribute("AttributeId", 
 			   "urn:oasis:names:tc:xacml:1.0:subject:subject-id");
 	   attributeSubject.setAttribute("DataType",
 			  "http://www.w3.org/2001/XMLSchema#string");
 	   attributeSubjectValue.setTextContent(userRole);
 	   attributeSubject.appendChild(attributeSubjectValue);
 	   subject.appendChild(attributeSubject);
 	   
 	   //resource
 	   Element resource = doc.createElement("Resource");
 	   Element attributeResource = doc.createElement("Attribute");
	   Element attributeResourceValue = doc.createElement("AttributeValue");
	   attributeResource.setAttribute("AttributeId", 
			   "urn:oasis:names:tc:xacml:1.0:resource:resource-id");
	   attributeResource.setAttribute("DataType",
			  "http://www.w3.org/2001/XMLSchema#string");
	   attributeResourceValue.setTextContent(resourceId);
	   attributeResource.appendChild(attributeResourceValue);
	   resource.appendChild(attributeResource);
 	   
 	   
 	   //action
 	   Element action = doc.createElement("Action");
 	   Element attributeAction = doc.createElement("Attribute");
	   Element attributeActionValue = doc.createElement("AttributeValue");
	   attributeAction.setAttribute("AttributeId", 
			   "urn:oasis:names:tc:xacml:1.0:action:action-id");
	   attributeAction.setAttribute("DataType",
			  "http://www.w3.org/2001/XMLSchema#string");
	   attributeActionValue.setTextContent(resourceId);
	   attributeAction.appendChild(attributeActionValue);
	   action.appendChild(attributeAction);
 	   
 	   //environment
 	   Element environment = doc.createElement("Environment");
 	   

 	   request.appendChild(subject);
 	   request.appendChild(resource);
 	   request.appendChild(action);
 	   request.appendChild(environment);
 	   doc.appendChild(request);
 	  
 	   output(doc);
 	   saveXml("d:\\request.xml",doc);
 	   
 	   return request;
    }
    
    public static void output(Node node) {//将node的XML字符串输出到控制台
        TransformerFactory transFactory=TransformerFactory.newInstance();
        try {
            Transformer transformer = transFactory.newTransformer();
            transformer.setOutputProperty("encoding", "utf-8");
            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");
//          设置编码
            transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
            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();
        }   
    }
}

直接创建doc,并保存到xml文件中


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值