目錄
1)Apache Commons Configuration framework框架使用
輸出:
3302
1)DOM(JAXP Crimson解析器)
2)SAX
使用好处
解析代码开始了
XPath表达式使用
访问环境变量
联合配置
统一管理模块化
自动重新加载
首頁 後端開發 XML/RSS教程 Apache Commons Configuration讀取xml配置

Apache Commons Configuration讀取xml配置

Feb 17, 2017 pm 03:33 PM


近期專案自己手寫一個字串連接池。因為環境不同有開發版本、測試版本、上線版本、每個版本用到的資料庫也是不一樣的。所以需要能靈活的切換資料庫連線。當然這個用maven就解決了。 Apache Commons Configuration 框架使用的主要是解析資料庫連接字串。
下面介紹Apache Commons Configuration 框架的常用部分。

1)Apache Commons Configuration framework框架使用

**

  • 下載jar包http://www.php.cn/或http://www.php.cn/ maven搜尋下載

  • 研究api的使用。
  • 使用好處

    ·當xml結構大變化的時候不用過多的修改解析xml的程式碼

用戶只需要修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改自己的解析語法樹即可修改。
Apache Commons Configuration讀取xml配置

客戶只需要修改語法樹框架去解析,思考的起點是不是跟設計模式中的解釋器模式類似。建立抽象語法樹並解釋執行。


使用者只需要關心和修改自己的解析語法樹即可。



用戶不用關係如何解析只需要配置對應的解析語法規則即可。

簡化程式xml配置結構變化後大幅的修改程式碼。


先配置Maven。



 <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.8</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.8.0</version>
    </dependency>
    <dependency>
        <groupId>commons-jxpath</groupId>
        <artifactId>commons-jxpath</artifactId>
        <version>1.3</version>
    </dependency>
登入後複製
登入後複製

定義一個springok1.xml內容如下


<?xml version="1.0" encoding="UTF-8"?><!-- springok1.xml --><config>
    <database>
        <url>127.0.0.1</url>
        <port>3306</port>
        <login>admin</login>
        <password></password>
    </database></config>
登入後複製
登入後複製

解析程式碼開始了

public static void main(String[] args) throws Exception {
        XMLConfiguration conf=new XMLConfiguration("springok1.xml");
        System.out.println(conf.getString("database.url"));
        System.out.println(conf.getString("database.port"));
        System.out.println(conf.getString("database.login"));
        System.out.println(conf.getString("database.password"));
    }
登入後複製
登入後複製

輸出:說明已經成功解析了。 Apache Commons Configuration讀取xml配置127.0.0.1
3306

admin

獲取的方法有很多種更詳細的獲取方法可以從AbstractConfiguration方法中對應找到。
上面配置的是一個資料庫的連接訊息,如果配置很多資料庫的連接訊息,怎麼解析連接資訊切換呢。修改springok1.xml的資訊為多個連接配置如下:

<?xml version="1.0" encoding="UTF-8"?><!-- springok1.xml --><config><databases>
    <database>
        <url>127.0.0.1</url>
        <port>3306</port>
        <login>admin</login>
        <password></password>
    </database>
    <database>
        <url>127.0.0.1</url>
        <port>3302</port>
        <login>admin</login>
        <password>admin</password>
    </database></databases></config>
登入後複製
登入後複製

現在假設我們要獲取兩個的配置資料庫連接信息,程序如下:

    public static void main(String[] args) throws Exception {
        XMLConfiguration conf=new XMLConfiguration("springok1.xml");
        System.out.println(conf.getString("databases.database(0).url"));
        System.out.println(conf.getString("databases.database(0).port"));
        System.out.println(conf.getString("databases.database(0).login"));
        System.out.println(conf.getString("databases.database(0).password"));
        System.out.println(conf.getString("databases.database(1).url"));
        System.out.println(conf.getString("databases.database(1).port"));
        System.out.println(conf.getString("databases.database(1).login"));
        System.out.println(conf.getString("databases.database(1).password"));
    }
登入後複製
登入後複製

輸出:

127.0.0.1

3306

admin
.

3302

admin

admin

解析ok,

結合前面的配置文件的例子跟實戰我們發現多個相同的標籤的話索引是從0開始的。

XPath表達式使用

點的存取方式上面的那種方式是沒問題,對於一些複雜的配置來講,我們可能需要使用XPath表達式語言。這裡的主要優點是,使用了XML的進階查詢,程式看起來仍然比較簡潔易懂。可理解性高。

Apache Commons Configuration讀取xml配置
 還是解析上面的springok.xml檔。程式碼如下:

  XMLConfiguration conf=new XMLConfiguration("springok1.xml");
        conf.setExpressionEngine(new XPathExpressionEngine());
        System.out.println(conf.getString("databases/database[port=&#39;3306&#39;]/url"));
        System.out.println(conf.getString("databases/database[port=&#39;3302&#39;]/port"));
登入後複製
登入後複製

輸出:
127.0.0.1
3302
測試ok.

存取環境變數
EnvironmentConfiguration conf=new EnvironmentConfiguration();
        System.out.println(conf.getMap());
登入後複製
登入後複製

源分析如何實現:
public EnvironmentConfiguration()
    {        super(new HashMap<String, Object>(System.getenv()));
    }
登入後複製
登入後複製

rereee
可以再系統變數中定義一個需要連接的資料庫字串key,解析的時候會取得動態載入呢?
public String getDbUrl() throws ConfigurationException {
    EnvironmentConfiguration envConfig =new EnvironmentConfiguration();    String env = envConfig.getString("ENV_TYPE");    if("dev".equals(env) ||"production".equals(env)) {
        XMLConfiguration xmlConfig =new XMLConfiguration("springok1.xml");
        xmlConfig.setExpressionEngine(new XPathExpressionEngine());        String xpath ="databases/database[name = &#39;"+ env +"&#39;]/url";        return xmlConfig.getString(xpath);
    }else{        String msg ="ENV_TYPE environment variable is "+
                     "not properly set";
        throw new IllegalStateException(msg);
    }
}
登入後複製
登入後複製

測試ok沒問題。

統一管理模組化

xml配置如下圖:

public String getDbUrl()throws ConfigurationException { 🎜    DefaultConfigurationBuilder builder = 🎜        new DefaultConfigurationBuilder(“config.xml”); 🎜    boolean load =true; 🎜    CombinedConfiguration config = builder.getConfiguration(load); 🎜    config.setExpressionEngine(new XPathExpressionEngine()); 🎜    String env = config.getString(“ENV_TYPE”); 🎜    if(“dev”.equals(env) ||”production”.equals(env)) { 🎜        String xpath =”databases/database[name = ‘”+ env +”’]/url”; 🎜        return config.getString(xpath); 🎜    }else{ 🎜        String msg =”ENV_TYPE environment variable is “+ 🎜                     「not properly set」; 🎜        throw new IllegalStateException(msg); 🎜    } 🎜}🎜🎜自動重新載入🎜🎜當基於檔案的設定變化的時候會自動載入,因為我們可以設定載入策略。框架會輪詢設定文件,當檔案的內容改變時,設定物件也會刷新。你可以用程式控制:🎜
    XMLConfiguration config =new XMLConfiguration("springok1.xml");
        ReloadingStrategy strategy =new FileChangedReloadingStrategy();
        ((FileChangedReloadingStrategy) strategy).setRefreshDelay(5000);
        config.setReloadingStrategy(strategy);
登入後複製
登入後複製
🎜或是設定的時候控制:🎜
<?xmlversion="1.0"encoding="UTF-8"?><!-- config.xml --><configuration>
  <env/>
  <xmlfileName="const.xml">
    <reloadingStrategyrefreshDelay="5000"      config-class="org.apache.commons.configuration.reloading.FileChangedReloadingStrategy"/>
  </xml></configuration>
登入後複製
登入後複製

下面是dom和sax方式的手动解析方式可参考使用。
java语言中xml解析有很多种方式,最流行的方式有sax和dom两种。
1. dom是把所有的解析内容一次性加入内存所以xml内容大的话性能不好。
2. sax是驱动解析。所以内存不会占用太多。(spring用的就是sax解析方式)

需要什么包自己到网上找下吧?
xml文件如下:

<?xml version="1.0" encoding="GB2312"?> 
<RESULT> 
<VALUE> 
   <NO>springok1</NO> 
   <ADDR>springok</ADDR> 
</VALUE> 
<VALUE> 
   <NO>springok2</NO> 
   <ADDR>springok</ADDR> 
</VALUE> 
</RESULT>
登入後複製
登入後複製

1)DOM(JAXP Crimson解析器)

DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。
登入後複製
登入後複製
import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ 
 public static void main(String arge[]){ 

  long lasting =System.currentTimeMillis();   try{ 
   File f=new File("data_10k.xml");    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();    DocumentBuilder builder=factory.newDocumentBuilder();    Document doc = builder.parse(f);    NodeList nl = doc.getElementsByTagName("VALUE");    for (int i=0;i<nl.getLength();i++){     System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());     System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());    } 
  }catch(Exception e){ 
   e.printStackTrace(); }
登入後複製
登入後複製

2)SAX

SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。

选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。

DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。

SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
登入後複製
登入後複製
import org.xml.sax.*; 
import org.xml.sax.helpers.*; 
import javax.xml.parsers.*; 

public class MyXMLReader extends DefaultHandler {  java.util.Stack tags = new java.util.Stack(); 
 public MyXMLReader() { 
  super(); 
} 

 public static void main(String args[]) { 
  long lasting = System.currentTimeMillis(); 
  try { 
   SAXParserFactory sf = SAXParserFactory.newInstance(); 
   SAXParser sp = sf.newSAXParser(); 
   MyXMLReader reader = new MyXMLReader(); 
   sp.parse(new InputSource("data_10k.xml"), reader); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 

  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");} 
  public void characters(char ch[], int start, int length) throws SAXException { 
  String tag = (String) tags.peek(); 
  if (tag.equals("NO")) { 
   System.out.print("车牌号码:" + new String(ch, start, length)); 
} 
if (tag.equals("ADDR")) { 
  System.out.println("地址:" + new String(ch, start, length)); 
} 
} 

  public void startElement(String uri,String localName,String qName,Attributes attrs) { 
  tags.push(qName);} 
}
登入後複製
登入後複製

**

总结:个人喜欢这个框架,支持定时刷新、xpath、import方式。

近期项目自己手写一个字符串连接池。因为环境不同有开发版本、测试版本、上线版本、每一个版本用到的数据库也是不一样的。所以需要能灵活的切换数据库连接。当然这个用maven就解决了。Apache Commons Configuration 框架用的主要是解析数据库连接字符串。
下面介绍Apache Commons Configuration 框架的常用部分。

1)Apache Commons Configuration framework框架使用

**

  • 下载jar包http://www.php.cn/或者http://www.php.cn/ maven中搜索下载

  • 研究api的使用。

使用好处

  • ·当xml结构大变化的时候不用过多的修改解析xml的代码

  • 用户只需要修改自己的解析语法树即可。

  • 客户只需要修改语法树框架去解析,思考的起点是不是跟设计模式中的解释器模式类似。构建抽象语法树并解释执行。

  • 用户只需要关心和修改自己的解析语法树即可。

  • 用户不用关系如何解析只需要配置对应的解析语法规则即可。

  • 简化程序xml配置结构变化后大幅度的修改代码。

    首先先配置一下Maven。

 <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.8</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.8.0</version>
    </dependency>
    <dependency>
        <groupId>commons-jxpath</groupId>
        <artifactId>commons-jxpath</artifactId>
        <version>1.3</version>
    </dependency>
登入後複製
登入後複製

定义一个springok1.xml内容如下
Apache Commons Configuration讀取xml配置

<?xml version="1.0" encoding="UTF-8"?><!-- springok1.xml --><config>
    <database>
        <url>127.0.0.1</url>
        <port>3306</port>
        <login>admin</login>
        <password></password>
    </database></config>
登入後複製
登入後複製

解析代码开始了

public static void main(String[] args) throws Exception {
        XMLConfiguration conf=new XMLConfiguration("springok1.xml");
        System.out.println(conf.getString("database.url"));
        System.out.println(conf.getString("database.port"));
        System.out.println(conf.getString("database.login"));
        System.out.println(conf.getString("database.password"));
    }
登入後複製
登入後複製

输出如下:说明已经成功解析xml了。
127.0.0.1
3306
admin
获取的方法有很多种更详细的获取方法可以从AbstractConfiguration方法中对应找到。
上面配置的是一个数据库的连接信息,如果配置很多数据库的连接信息,怎么解析连接信息切换呢。修改springok1.xml的信息为多个连接配置如下:

<?xml version="1.0" encoding="UTF-8"?><!-- springok1.xml --><config><databases>
    <database>
        <url>127.0.0.1</url>
        <port>3306</port>
        <login>admin</login>
        <password></password>
    </database>
    <database>
        <url>127.0.0.1</url>
        <port>3302</port>
        <login>admin</login>
        <password>admin</password>
    </database></databases></config>
登入後複製
登入後複製

现在假设我们要获取两个的配置数据库连接信息,程序如下:

    public static void main(String[] args) throws Exception {
        XMLConfiguration conf=new XMLConfiguration("springok1.xml");
        System.out.println(conf.getString("databases.database(0).url"));
        System.out.println(conf.getString("databases.database(0).port"));
        System.out.println(conf.getString("databases.database(0).login"));
        System.out.println(conf.getString("databases.database(0).password"));
        System.out.println(conf.getString("databases.database(1).url"));
        System.out.println(conf.getString("databases.database(1).port"));
        System.out.println(conf.getString("databases.database(1).login"));
        System.out.println(conf.getString("databases.database(1).password"));
    }
登入後複製
登入後複製

输出:
127.0.0.1
3306
admin

127.0.0.1
3302
admin
admin

解析ok,
结合前面的配置文件的例子跟实战我们发现多个相同的标签的话索引是从0开始的。

XPath表达式使用

点的访问方式上面的那种方式是没问题,对于一些复杂的配置来讲,我们可能需要使用XPath表达式语言。这里的主要优点是,使用了XML的高级查询,程序看起来仍然比较简洁易懂。可理解性高。
Apache Commons Configuration讀取xml配置
还是解析上面的springok.xml文件。代码如下:

  XMLConfiguration conf=new XMLConfiguration("springok1.xml");
        conf.setExpressionEngine(new XPathExpressionEngine());
        System.out.println(conf.getString("databases/database[port=&#39;3306&#39;]/url"));
        System.out.println(conf.getString("databases/database[port=&#39;3302&#39;]/port"));
登入後複製
登入後複製

输出:
127.0.0.1
3302
测试ok.

访问环境变量

EnvironmentConfiguration conf=new EnvironmentConfiguration();
        System.out.println(conf.getMap());
登入後複製
登入後複製

源码分析如何实现:

public EnvironmentConfiguration()
    {        super(new HashMap<String, Object>(System.getenv()));
    }
登入後複製
登入後複製

联合配置

联合一和2两种方式,是不是我们可以再系统变量中定义一个需要连接的数据库字符串key,解析的时候获取动态加载呢?

public String getDbUrl() throws ConfigurationException {
    EnvironmentConfiguration envConfig =new EnvironmentConfiguration();    String env = envConfig.getString("ENV_TYPE");    if("dev".equals(env) ||"production".equals(env)) {
        XMLConfiguration xmlConfig =new XMLConfiguration("springok1.xml");
        xmlConfig.setExpressionEngine(new XPathExpressionEngine());        String xpath ="databases/database[name = &#39;"+ env +"&#39;]/url";        return xmlConfig.getString(xpath);
    }else{        String msg ="ENV_TYPE environment variable is "+
                     "not properly set";
        throw new IllegalStateException(msg);
    }
}
登入後複製
登入後複製

测试ok没问题。

统一管理模块化

xml配置如下图:

Apache Commons Configuration讀取xml配置
public String getDbUrl()throws ConfigurationException {
DefaultConfigurationBuilder builder =
new DefaultConfigurationBuilder(“config.xml”);
boolean load =true;
CombinedConfiguration config = builder.getConfiguration(load);
config.setExpressionEngine(new XPathExpressionEngine());
String env = config.getString(“ENV_TYPE”);
if(“dev”.equals(env) ||”production”.equals(env)) {
String xpath =”databases/database[name = ‘”+ env +”’]/url”;
return config.getString(xpath);
}else{
String msg =”ENV_TYPE environment variable is “+
“not properly set”;
throw new IllegalStateException(msg);
}
}

自动重新加载

当基于文件的配置变化的时候自动加载,因为我们可以设置加载策略。框架会轮询配置文件,当文件的内容发生改变时,配置对象也会刷新。你可以用程序控制:

    XMLConfiguration config =new XMLConfiguration("springok1.xml");
        ReloadingStrategy strategy =new FileChangedReloadingStrategy();
        ((FileChangedReloadingStrategy) strategy).setRefreshDelay(5000);
        config.setReloadingStrategy(strategy);
登入後複製
登入後複製

或者配置的时候控制:

<?xmlversion="1.0"encoding="UTF-8"?><!-- config.xml --><configuration>
  <env/>
  <xmlfileName="const.xml">
    <reloadingStrategyrefreshDelay="5000"      config-class="org.apache.commons.configuration.reloading.FileChangedReloadingStrategy"/>
  </xml></configuration>
登入後複製
登入後複製

下面是dom和sax方式的手动解析方式可参考使用。
java语言中xml解析有很多种方式,最流行的方式有sax和dom两种。
1. dom是把所有的解析内容一次性加入内存所以xml内容大的话性能不好。
2. sax是驱动解析。所以内存不会占用太多。(spring用的就是sax解析方式)

需要什么包自己到网上找下吧?
xml文件如下:

<?xml version="1.0" encoding="GB2312"?> 
<RESULT> 
<VALUE> 
   <NO>springok1</NO> 
   <ADDR>springok</ADDR> 
</VALUE> 
<VALUE> 
   <NO>springok2</NO> 
   <ADDR>springok</ADDR> 
</VALUE> 
</RESULT>
登入後複製
登入後複製

1)DOM(JAXP Crimson解析器)

DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。
登入後複製
登入後複製
import java.io.*; import java.util.*; import org.w3c.dom.*; import javax.xml.parsers.*; public class MyXMLReader{ 
 public static void main(String arge[]){ 

  long lasting =System.currentTimeMillis();   try{ 
   File f=new File("data_10k.xml");    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();    DocumentBuilder builder=factory.newDocumentBuilder();    Document doc = builder.parse(f);    NodeList nl = doc.getElementsByTagName("VALUE");    for (int i=0;i<nl.getLength();i++){     System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());     System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());    } 
  }catch(Exception e){ 
   e.printStackTrace(); }
登入後複製
登入後複製

2)SAX

SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。

选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。

DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。

SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
登入後複製
登入後複製
import org.xml.sax.*; 
import org.xml.sax.helpers.*; 
import javax.xml.parsers.*; 

public class MyXMLReader extends DefaultHandler {  java.util.Stack tags = new java.util.Stack(); 
 public MyXMLReader() { 
  super(); 
} 

 public static void main(String args[]) { 
  long lasting = System.currentTimeMillis(); 
  try { 
   SAXParserFactory sf = SAXParserFactory.newInstance(); 
   SAXParser sp = sf.newSAXParser(); 
   MyXMLReader reader = new MyXMLReader(); 
   sp.parse(new InputSource("data_10k.xml"), reader); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 

  System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");} 
  public void characters(char ch[], int start, int length) throws SAXException { 
  String tag = (String) tags.peek(); 
  if (tag.equals("NO")) { 
   System.out.print("车牌号码:" + new String(ch, start, length)); 
} 
if (tag.equals("ADDR")) { 
  System.out.println("地址:" + new String(ch, start, length)); 
} 
} 

  public void startElement(String uri,String localName,String qName,Attributes attrs) { 
  tags.push(qName);} 
}
登入後複製
登入後複製

**

总结:个人喜欢这个框架,支持定时刷新、xpath、import方式。

 以上就是Apache Commons Configuration读取xml配置的内容,更多相关内容请关注PHP中文网(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
apache中cgi目錄怎麼設置 apache中cgi目錄怎麼設置 Apr 13, 2025 pm 01:18 PM

要在 Apache 中設置 CGI 目錄,需要執行以下步驟:創建 CGI 目錄,如 "cgi-bin",並授予 Apache 寫入權限。在 Apache 配置文件中添加 "ScriptAlias" 指令塊,將 CGI 目錄映射到 "/cgi-bin" URL。重啟 Apache。

怎麼查看自己的apache版本 怎麼查看自己的apache版本 Apr 13, 2025 pm 01:15 PM

有 3 種方法可在 Apache 服務器上查看版本:通過命令行(apachectl -v 或 apache2ctl -v)、檢查服務器狀態頁(http://&lt;服務器IP或域名&gt;/server-status)或查看 Apache 配置文件(ServerVersion: Apache/&lt;版本號&gt;)。

apache80端口被佔用怎麼辦 apache80端口被佔用怎麼辦 Apr 13, 2025 pm 01:24 PM

當 Apache 80 端口被佔用時,解決方法如下:找出佔用該端口的進程並關閉它。檢查防火牆設置以確保 Apache 未被阻止。如果以上方法無效,請重新配置 Apache 使用不同的端口。重啟 Apache 服務。

apache怎麼連接數據庫 apache怎麼連接數據庫 Apr 13, 2025 pm 01:03 PM

Apache 連接數據庫需要以下步驟:安裝數據庫驅動程序。配置 web.xml 文件以創建連接池。創建 JDBC 數據源,指定連接設置。從 Java 代碼中使用 JDBC API 訪問數據庫,包括獲取連接、創建語句、綁定參數、執行查詢或更新以及處理結果。

怎麼查看apache版本 怎麼查看apache版本 Apr 13, 2025 pm 01:00 PM

如何查看 Apache 版本?啟動 Apache 服務器:使用 sudo service apache2 start 啟動服務器。查看版本號:使用以下方法之一查看版本:命令行:運行 apache2 -v 命令。服務器狀態頁面:在 Web 瀏覽器中訪問 Apache 服務器的默認端口(通常為 80),版本信息顯示在頁面底部。

apache不能啟動怎麼解決 apache不能啟動怎麼解決 Apr 13, 2025 pm 01:21 PM

Apache 無法啟動,原因可能有以下幾點:配置文件語法錯誤。與其他應用程序端口衝突。權限問題。內存不足。進程死鎖。守護進程故障。 SELinux 權限問題。防火牆問題。軟件衝突。

apache怎麼配置zend apache怎麼配置zend Apr 13, 2025 pm 12:57 PM

如何在 Apache 中配置 Zend?在 Apache Web 服務器中配置 Zend Framework 的步驟如下:安裝 Zend Framework 並解壓到 Web 服務器目錄中。創建 .htaccess 文件。創建 Zend 應用程序目錄並添加 index.php 文件。配置 Zend 應用程序(application.ini)。重新啟動 Apache Web 服務器。

apache怎麼刪除多於的服務器名 apache怎麼刪除多於的服務器名 Apr 13, 2025 pm 01:09 PM

要從 Apache 中刪除多餘的 ServerName 指令,可以採取以下步驟:識別並刪除多餘的 ServerName 指令。重新啟動 Apache 使更改生效。檢查配置文件驗證更改。測試服務器確保問題已解決。

See all articles