dom4j解析xsd

package dom4j;


import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.io.SAXReader;




public class ReadXML {
static List list  =new ArrayList();;
//获取根目录
public Element getRoot(File file){
Element root = null;
//获取读取xml对象的工具
SAXReader saxReader = new SAXReader();
try {
//得到内容
Document document = saxReader.read(file);
//获取根节点
root = document.getRootElement();
//System.out.println(root.getName());
} catch (DocumentException e) {
e.printStackTrace();
}
return root;
}
//得到根目录的属性以及 命名空间 属性和 根节点的名字
public Map getRootProperteis(Element root){
//创建存储对象map
Map map = new HashMap();
//得到命名空间的属性
@SuppressWarnings("unchecked")
List namespacesList = root.declaredNamespaces();
//int len = namespacesList.size();
//System.out.println(len);
for (Namespace namespace : namespacesList) {
//System.out.println(namespace.getPrefix()+namespace.getURI());
if(
namespace.getPrefix().equals("")){
map.put("xmlns"+namespace.getPrefix(), namespace.getURI());
}else {
map.put("xmlns:"+namespace.getPrefix(), namespace.getURI());
}
}
//得到属性
@SuppressWarnings("unchecked")
List attributesList = root.attributes();
for (Attribute attribute : attributesList) {
map.put(attribute.getName(), attribute.getValue());
}
//得到根节点的名字
if(root.getQualifiedName().equals("xsd:documentation")){
map.put("xsd:documentation", root.getText().trim());
}else{
map.put("rootNodeName", root.getQualifiedName());
}

return map;
}

//获取节点列表
public List getNodeList(Element root){
List elementList = root.elements();
for (Element element : elementList) {


//是不是复杂元素,是不是混合元素
//System.out.println(element.hasMixedContent());
//是不是纯文本
//System.out.println(element.isTextOnly());
}
//System.out.println(elementList.size());
return elementList;
}
//获取节点属性
public Map getNodeProperteis(Element root,List list){
List elementList = getNodeList(root);
Map map = new HashMap();
//System.out.println(elementList.size());
for (Element element : elementList) {



//System.out.println(element.getQualifiedName());
//判断是否有命名空间
if(element.declaredNamespaces().size() > 0){
List namespacesList = element.declaredNamespaces();
for (Namespace namespace : namespacesList) {
//System.out.println(namespace.getPrefix()+namespace.getURI());
if(namespace.getPrefix().equals(""))
map.put("xmlns"+namespace.getPrefix(), namespace.getURI());
else {
map.put("xmlns:"+namespace.getPrefix(), namespace.getURI());
}
}
}
//获取节点内容
//System.out.println("element.getTextTrim()"+element.getTextTrim());
map.put("text", element.getTextTrim());
//获取节点 的名字
map.put("childenNodeName", element.getQualifiedName());
//获取属性的键值对
//System.out.println(element.attributes().size());
List attributesList = element.attributes();
//System.out.println(attributesList.size());
for (Attribute attribute : attributesList) {
map.put(attribute.getName(), attribute.getValue());
//System.out.println(attribute.getName()+"==="+attribute.getValue());
}
//如果是复杂元素
if(element.hasMixedContent()){
map.putAll(getNodeProperteis(element, list));

}
}
return map;
}
//获取所有的节点集合
public List getAllNode(Element root){

List elementList = root.elements();
for (Element element : elementList) {

list.add(element);
//如果还有子节点
if(element.hasMixedContent()){
getAllNode(element);
}
}
return list;
}
//遍历属性是否存在
public boolean isAttribute(String attrName){
//获取属性列表

return false;
}
//根据属性值获取节点
public Element fromName2Elemen(Element root,String propeity){
List eleList = getAllNode(root);
Element e = null;
int i = eleList.size();
//通过 属性值获取 节点 内容
//propeity = "cmof:OpaqueExpression";
System.out.println(i);



for (int j = 0; j < i; j++) {

Map strMap = getRootProperteis(eleList.get(j));
for(String s:strMap.keySet()){
if(propeity.equals(strMap.get(s))){
System.out.print("要查的属性存在");
System.out.print("这是第"+(j+1)+"个element;");
System.out.println("整个节点内容为:"+eleList.get(j));
e = eleList.get(j);
}
}
}
return e;
}

public static void main(String[] args) {
//获取根目录
String path = System.getProperty("user.dir");
//获取路径
String url = path+"\\src\\main\\java\\persistence_1_0.xsd";
File file = new File(url);
//获取对象
ReadXML readXML = new ReadXML();
Element root = readXML.getRoot(file);

//获取节点列表
List eleList = readXML.getAllNode(root);
System.out.println(eleList.size());
for (Element element : eleList) {
//System.out.println(readXML.getRootProperteis(element));
}

System.out.println(readXML.fromName2Elemen(root, "persistence:persistence-unit-transaction-type"));
//获取根目录
//得到根目录的属性以及 命名空间 属性和 根节点的名字
//获取节点列表
//获取节点属性
//遍历属性是否存在
//根据属性值获取节点
}

}


persistence_1_0.xsd

你可能感兴趣的:(java,软件编程,xml,xsd,dom4j)