java读xml

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();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值