`
yjgyjg4
  • 浏览: 116139 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java读xml

    博客分类:
  • java
 
阅读更多
package dmx.ams.util;

import java.io.IOException;
import java.io.StringBufferInputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import dmx.net.transfer.imp.TransferCommand;

@SuppressWarnings("deprecation")
public class AdiValidate {
	
	private String fileUrl;
	private List<String> assetList = new ArrayList<String>();
	private static final Log log = LogFactory.getLog(TransferCommand.class);
	private final String pacakAssetId_expr = "//ADI/Metadata/AMS";
	private final String titleAssetId_expr = "//ADI/Asset/Metadata/AMS";
	private final String assetArr_expr = "//ADI/Asset/Asset";
	private final String assetId = "Asset_ID";
	
	public AdiValidate(String fileUrl){
		this.fileUrl = fileUrl;
	}
	/**
	 * validate ADI file assetId is same.
	 * same return false
	 * @return true or false
	 */
	public boolean assetIdValidate(){
		
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			factory.setValidating(false);
			//factory.setFeature(Constants.FEATURE_SECURE_PROCESSING,false);
			DocumentBuilder  builder = factory.newDocumentBuilder();
			builder.setEntityResolver(new EntityResolver(){
				public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
                {
                    return new InputSource(new StringBufferInputStream(""));   
//                    return null;//这个的效果仍然是从网络来抓取DTD来验证
                    }
             });
			
			log.info("imp adi file url is:"+fileUrl);
			Document doc = builder.parse(fileUrl);
			
			XPathFactory xpathFactory = XPathFactory.newInstance(XPathConstants.DOM_OBJECT_MODEL);
			XPath xpath= xpathFactory.newXPath();
			
			org.w3c.dom.Node packAms_Node = (org.w3c.dom.Node)xpath.evaluate(pacakAssetId_expr, doc,XPathConstants.NODE);
			org.w3c.dom.Node titleAms_Node = (org.w3c.dom.Node)xpath.evaluate(titleAssetId_expr, doc,XPathConstants.NODE);
			log.info("=packAssetId===="+packAms_Node.getAttributes().getNamedItem(assetId).getNodeValue());
			log.info("=titleAssetId===="+titleAms_Node.getAttributes().getNamedItem(assetId).getNodeValue());
			assetList.add(packAms_Node.getAttributes().getNamedItem(assetId).getNodeValue());
			assetList.add(titleAms_Node.getAttributes().getNamedItem(assetId).getNodeValue());
			
			org.w3c.dom.NodeList assetNodeList = (org.w3c.dom.NodeList) xpath.evaluate(assetArr_expr, doc, XPathConstants.NODESET);
			getAssetIdArr(assetNodeList);
		    System.out.println(assetList.size());
		    return validateAssetId(assetList);
		} catch (Exception e) {
			log.error("validate ADI ERROR !",e);
			return false;
		}
	}
	
	private boolean validateAssetId(List<String> assetIdArr) {
		boolean flag = true;
		if (assetIdArr !=null && assetIdArr.size()>0) {
			for (int i=0; i<assetIdArr.size(); i++) {
				String assetId = assetIdArr.get(i);
				for (int j=0; j<assetIdArr.size() ;j++) {
					//System.out.println("---"+j+"----"+assetIdArr.get(j));
					if (i!=j && assetId == assetIdArr.get(j)) {
						flag= false;
					}
				}
			}
		}
		return flag;
	}
	
	private List<String> getAssetIdArr(NodeList assetNodeList){
		 for (int i=0 ;i<assetNodeList.getLength(); i++) {
		    	NodeList nodeList = assetNodeList.item(i).getChildNodes();
		    	for(int j=0 ; j< nodeList.getLength(); j++) {
		    		if(nodeList.item(j).getNodeName().indexOf("Metadata")>-1) {
		    			NodeList nlist = nodeList.item(j).getChildNodes();
		    			for(int n=0; n< nlist.getLength(); n++) {
		    				if (nlist.item(n).getNodeName().indexOf("AMS")>-1) {
		    					//System.out.println("asset_id=="+nlist.item(n).getAttributes().getNamedItem("Asset_ID").getNodeValue());
		    					assetList.add(nlist.item(n).getAttributes()
		    							.getNamedItem(assetId).getNodeValue());
		    				}
		    			}
		    		}
		    	}
		    }	
		return assetList;
	}
	
	public static void main(String[] args){
		AdiValidate av = new AdiValidate("E:\\adi.xml");
		av.assetIdValidate();
	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics