java通过org.w3c.dom解析xml文件

要点:

 

        // 属性值获取  String Element.getAttribute(name);
        //标签值通过父元素对象获取  NodeList  parentElement.getElementsByTagName(name);
        //标签中间的值获取  String Element.getTextContent()

 

    private void loadSdataConfig() throws RuntimeException {
        // 属性值获取  String Element.getAttribute(name);
        //标签值通过父元素对象获取  NodeList  parentElement.getElementsByTagName(name);
        //标签中间的值获取  String Element.getTextContent()
        try {
            String sdataPath = SdataConfig.class.getResource("/sdata.xml").toURI().getPath();
            if (sdataPath == null) {
                throw new RuntimeException("sdata.xml path is null");
            }

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = null;
            Document document = null;
            try {
                builder = factory.newDocumentBuilder();
                document = builder.parse(sdataPath);
            } catch (Exception e) {
                e.printStackTrace();
            }

            Element element = document.getDocumentElement();

            NodeList sdataPortList = element.getElementsByTagName("sdata-port");
            if (sdataPortList != null && sdataPortList.getLength() > 0) {
                sdataPort = Integer.parseInt(sdataPortList.item(0).getTextContent());
            }
            NodeList dataBrowserPortList = element.getElementsByTagName("data-browser-port");
            if (dataBrowserPortList != null && dataBrowserPortList.getLength() > 0) {
                dataBrowserPort = Integer.parseInt(dataBrowserPortList.item(0).getTextContent());
            }
            NodeList commandPortList = element.getElementsByTagName("command-port");
            if (commandPortList != null && commandPortList.getLength() > 0) {
                commandPort = Integer.parseInt(commandPortList.item(0).getTextContent());
            }
            LOG.info("sdata-port:{} , data-browser-port:{} , command-port:{} ", sdataPort, dataBrowserPort, commandPort);

            NodeList marketInitJobsList = element.getElementsByTagName("marketInitPushJobs");
            if (marketInitJobsList != null && marketInitJobsList.getLength() > 0) {
                Element marketInitPushJob = (Element) marketInitJobsList.item(0);
                NodeList marketInitPushJobList = marketInitPushJob.getElementsByTagName("marketInitPushJob");
                for (int i = 0; i < marketInitPushJobList.getLength(); i++) {
                    Element ele = (Element) marketInitPushJobList.item(i);
                    Job job = new Job();
                    String name = ele.getAttribute("name");
                    job.setName(name);
                    String cron = ele.getAttribute("cron");
                    if (cron != null && cron.trim().length() > 0) {
                        job.setCrons(Arrays.asList(cron.split(";")));
                    }
                    String clazz = ele.getAttribute("class");
                    job.setJobClass(clazz);
                    marketInitPushJobs.add(job);
                }
            }
            LOG.info("marketInitPushJobs msgs:{}", marketInitPushJobs);

            NodeList verdatasList = element.getElementsByTagName("verdatas");
            if (verdatasList != null && verdatasList.getLength() > 0) {
                Element verdatasElement = (Element) verdatasList.item(0);
                NodeList verdataList = verdatasElement.getElementsByTagName("verdata");
                if (verdataList != null && verdataList.getLength() > 0) {
                    for (int i = 0; i < verdataList.getLength(); i++) {
                        Element verdataElement = (Element) verdataList.item(i);
                        Verdata verdata = new Verdata();
                        String verdataName = verdataElement.getAttribute("name");
                        verdata.setName(verdataName);
                        String adapt = verdataElement.getAttribute("isAdapt");
                        if (adapt != null && adapt.trim().length() > 0) {
                            verdata.setAdapt(Boolean.parseBoolean(adapt));
                        }
                        NodeList processorList = verdataElement.getElementsByTagName("processor");
                        if (processorList != null && processorList.getLength() > 0) {
                            for (int j = 0; j < processorList.getLength(); j++) {
                                Element processorElement = (Element) processorList.item(j);
                                Processor processor = new Processor();
                                processor.setId(processorElement.getAttribute("id"));
                                processor.setName(processorElement.getAttribute("name"));
                                processor.setDataId(Integer.parseInt(processorElement.getAttribute("dataId")));
                                processor.setCodecClass(processorElement.getAttribute("codecClass"));
                                processor.setFactoryClass(processorElement.getAttribute("factoryClass"));
                                String isInit = processorElement.getAttribute("isInit");
                                if (isInit != null && isInit.trim().length() > 0) {
                                    processor.setInit(Boolean.parseBoolean(isInit));
                                }
                                List<Processor> processors = verdata.getProcessors();
                                if (processors == null) {
                                    processors = new ArrayList<>();
                                    verdata.setProcessors(processors);
                                }
                                processors.add(processor);
                            }
                        }
                        verdatas.add(verdata);
                    }
                }
            }
            LOG.info("verdatas msg:{}", verdatas);

            NodeList jobsList = element.getElementsByTagName("jobs");
            if (jobsList != null && jobsList.getLength() > 0) {
                Element jobsElement = (Element) jobsList.item(0);
                NodeList jobList = jobsElement.getElementsByTagName("job");
                if (jobList != null && jobList.getLength() > 0) {
                    for (int i = 0; i < jobList.getLength(); i++) {
                        Element jobElement = (Element) jobList.item(i);
                        Job job = new Job();
                        job.setName(jobElement.getAttribute("name"));
                        String cron = jobElement.getAttribute("cron");
                        if (cron != null && cron.trim().length() > 0) {
                            job.setCrons(Arrays.asList(cron.split(";")));
                        }
                        job.setJobClass(jobElement.getAttribute("jobClass"));
                        jobs.add(job);
                    }
                }
            }
            LOG.info("jobs msg: {}", jobs);


        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

 

sdata.xml文件

 

 

<?xml version="1.0" encoding='UTF-8'?>
<sdata-config>
    <sdata-port desc="">1204</sdata-port>
    <data-browser-port desc="">1205</data-browser-port>
    <command-port desc="">1206</command-port>

    <marketInitPushJobs>
        <marketInitPushJob name="SHSZ" cron="0 52,55 8 * * ?;0 1,15,30 9 * * ?"
                           class="com.eastmoney.sdata.job.MarketInitPushJob" desc="沪深市场早盘推数据Job"/>
        <marketInitPushJob name="StaticBlock" cron="0 0 1 * * ?"
                           class="com.eastmoney.sdata.db.staticblock.StaticBlockSecurityIdJob" desc="静态指数内码集合Job"/>
    </marketInitPushJobs>

    <!-- -->
    <verdatas>

        <verdata name="shszfactor" isAdapt="true">
            <processor id="shszfactor-10229" name="shszfactor" dataId="10229"   factoryClass="com.eastmoney.sdata.verdata.impl.factor.SHSZFactorFactory" codecClass="com.eastmoney.sdata.verdata.impl.factor.FactorEncode" desc=""/>
            <processor id="shszfactor-10129" name="shszfactor" dataId="10129" isInit="true" factoryClass="com.eastmoney.sdata.verdata.impl.factor.SHSZFactorFactory" codecClass="com.eastmoney.sdata.verdata.impl.factor.FactorEncode" desc=""/>
        </verdata>

        <verdata name="hkfactor" isAdapt="true">
            <processor id="hkfactor-10232" name="hkfactor" dataId="10232"   factoryClass="com.eastmoney.sdata.verdata.impl.factor.HKFactorFactory" codecClass="com.eastmoney.sdata.verdata.impl.factor.FactorEncode" desc=""/>
            <processor id="hkfactor-10132" name="hkfactor" dataId="10132"  isInit="true" factoryClass="com.eastmoney.sdata.verdata.impl.factor.HKFactorFactory" codecClass="com.eastmoney.sdata.verdata.impl.factor.FactorEncode" desc=""/>
        </verdata>

        <verdata name="ussfactor" isAdapt="true">
            <processor id="ussfactor-10233" name="ussfactor" dataId="10233" isInit="false" factoryClass="com.eastmoney.sdata.verdata.impl.factor.USSFactorFactory"
                       codecClass="com.eastmoney.sdata.verdata.impl.factor.FactorEncode" desc=""/>
            <processor id="ussfactor-10133" name="ussfactor" dataId="10133" isInit="false" factoryClass="com.eastmoney.sdata.verdata.impl.factor.USSFactorFactory"
                       codecClass="com.eastmoney.sdata.verdata.impl.factor.FactorEncode" desc=""/>
        </verdata>


        <verdata name="sanbanfactor" isAdapt="true">
            <processor id="sanbanfactor-10234" name="" dataId="10234" isInit="false" factoryClass="com.eastmoney.sdata.verdata.impl.factor.SanbanFactorFactory"
                       codecClass="com.eastmoney.sdata.verdata.impl.factor.FactorEncode" desc=""/>
            <processor id="sanbanfactor-10134" name="" dataId="10134" isInit="true" factoryClass="com.eastmoney.sdata.verdata.impl.factor.SanbanFactorFactory"
                       codecClass="com.eastmoney.sdata.verdata.impl.factor.FactorEncode" desc=""/>
        </verdata>

        <verdata name="finance" isAdapt="false">
            <processor id="finance-10030" name="finance" dataId="10030" isInit="true" factoryClass="com.eastmoney.sdata.verdata.impl.finance.FinanceFacotry"
                       codecClass="com.eastmoney.sdata.verdata.impl.finance.FinanceEncode" desc=""/>
        </verdata>


        <verdata name="price" isAdapt="false">
            <processor id="price-10031" name="price" dataId="10031" isInit="true" factoryClass="com.eastmoney.sdata.verdata.impl.price.PriceFactory" codecClass="com.eastmoney.sdata.verdata.impl.price.PriceEncode" desc=""/>
        </verdata>


        <verdata name="date" isAdapt="false">
            <processor id="date-10035" name="date"  dataId="10035" isInit="true" factoryClass="com.eastmoney.sdata.verdata.impl.date.DateFactory" codecClass="com.eastmoney.sdata.verdata.impl.date.DateEncode" desc=""/>
        </verdata>

        <verdata name="optionbond" isAdapt="false">
            <processor id="optionbond-10040" name="optionbond"  dataId="10040" isInit="true" factoryClass="com.eastmoney.sdata.verdata.impl.optionbond.OptionBondDataFactory" codecClass="com.eastmoney.sdata.verdata.impl.optionbond.OptionBondEncode" desc=""/>
        </verdata>




        <jobs>
            <job name="SHSZFQCalJob" cron="0 0 7 * * ?" jobClass="com.eastmoney.sdata.verdata.job.SHSZFQCalJob" desc=""/>
            <job name="SHSZSanbanFactorUpdateJob" cron="0 50 8 * * ?;0 05,30 9 * * ?" jobClass="com.eastmoney.sdata.verdata.job.SHSZSanbanFactorUpdateJob" desc=""/>
        </jobs>
    </verdatas>


</sdata-config>

 

 

maven依赖:

        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的节点 * @param attributeName 要取值的属性名称 * @return 要获取的属性的值 * @author HX_2010-01-12 */ public static String getAttribute( Element element, String attributeName ) { return element.getAttribute( attributeName ); } /** * 获取指定节点下的文本 * @param element 要获取文本的节点 * @return 指定节点下的文本 * @author HX_2010-01-12 */ public static String getText( Element element ) { return element.getFirstChild().getNodeValue(); } /** * 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某节点下的某个子节点(指定子节点名称,和某个属性的值) * 即获取parentElement下名字叫childName,并且属性attributeName的值为attributeValue的子结点 * @param parentElement 要获取子节点的那个父节点 * @param childName 要获取的子节点名称 * @param attributeName 要指定的属性名称 * @param attributeValue 要指定的属性的值 * @return 符合条件的子节点 * @throws Exception 子结点不存在或有多个符合条件的子节点 * @author HX_2008-12-01 */ public static Element getChildElement( Element parentElement, String childName, String attributeName, String attributeValue ) throws Exception { NodeList list = parentElement.getElementsByTagName( childName ); int count = 0; Element curElement = null; for ( int i = 0 ; i < list.getLength() ; i ++ ) { Element child = ( Element )list.item( i ); String value = child.getAttribute( attributeName ); if ( true == value.equals( attributeValue ) ) { curElement =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值