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文件中