2016-09-24 7 views
-1

私は多くのサーバーのデータベースに接続して、それらからすべてデータを取得しています。xmlファイルには、各データベースサーバー[ip、port、user、passwd]そのサーバー上で実行されます。私は自分のコードでarrayListというクエリを読んで、ひとつずつ処理します。私が必要とするのは、データベースサーバの情報を読み込んでそれに接続して相対的なクエリを実行する明確なシンプルなコードです。つまり、クエリごとにデータベースのIP、ポート、ユーザ、パスワードを取得する必要があります。ここに私のXMLファイル構造があります。 adavnceのおかげで。Javaコードを使用してxmlノードを読み取る

<?xml version="1.0"?> 
<Database> 
<DB> 
<ip></ip> 
<port></port> 
<user></user> 
<pass></pass> 
</DB> 
<Query> 
select date from myTable 
</Query> 
<DB> 
<ip></ip> 
<port></port> 
<user></user> 
<pass></pass> 
</DB> 
<Query> 
select time from myTable 
</Query> 
<DB> 
<ip></ip> 
<port></port> 
<user></user> 
<pass><></pass> 
</DB> 
<Query> 
select name from myTable 
</Query> 
</Database> 

答えて

0

xml処理とxpathにJavaのDOM APIを使用できます。

以下はあなたが何をしたいの一部を行います(IPアドレスとポートを抽出)いくつかのサンプルコードです。あなたは、ファイルからの読み込みの代わりの文字列を使用して、代わりにこのやっているので

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathExpression; 
import javax.xml.xpath.XPathExpressionException; 
import javax.xml.xpath.XPathFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 


public class DomTester { 


    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException { 

     InputStream inStr = null; 
     try { 
      String xml = "<?xml version=\"1.0\"?>" 
        + "<Database>" 
        + "<DB>" 
        +  "<ip>666</ip>" 
        +  "<port>7</port>" 
        + "</DB>" 
        + "<DB>" 
        + " <ip>13</ip>" 
        +  "<port>1</port>" 
        + "</DB>" 
        + "</Database>"; 

      inStr = new ByteArrayInputStream(xml.getBytes()); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(inStr); 

      XPathFactory xFactory = XPathFactory.newInstance(); 
      XPath xpath = xFactory.newXPath(); 
      XPathExpression expr = xpath.compile("/Database"); 
      Element databaseEl = (Element)expr.evaluate(doc, XPathConstants.NODE); 

      NodeList databaseNodeList = databaseEl.getChildNodes(); 
      for (int ii=0; ii<databaseNodeList.getLength(); ++ii) { 
       Node dbNode = databaseNodeList.item(ii); 
       XPathExpression ipExpr = xpath.compile("ip"); 
       Element ipElement = (Element)ipExpr.evaluate(dbNode, XPathConstants.NODE); 
       String ip = ipElement.getTextContent(); 

       XPathExpression portExpr = xpath.compile("port"); 
       Element portEl = (Element)portExpr.evaluate(dbNode, XPathConstants.NODE); 
       String port = portEl.getTextContent(); 

       System.out.println("DB node[" + ii + "] = ip: " + ip + " port: " + port); 
      } 
     } finally { 
      if (null != inStr) { 
       inStr.close(); 
      } 
     } 
    } 
} 

File f = new File("your/file/path.xml"); 
inStr = new FileInputStream(f); 

inStr = new ByteArrayInputStream(xml.getBytes()); 

これを行うあなたは残りの部分を行うには、それを修正する必要があります

関連する問題