2015-06-23 54 views
0

我需要解析XML文件存儲的值到數據庫中的同一節點名稱的xml文件節點的XML數.. 請考慮下面的XML獲取與使用DOM

<Name NameType="Primary Name"> 
<NameValue> 
    <FirstName>Hassan</FirstName> 
    <MiddleName>Dahir</MiddleName> 
    <Surname>Aweys</Surname> 
    <OriginalScriptName>حسن ظاهرعويس</OriginalScriptName> 
    <OriginalScriptName>ハッサン・ダヒル・アウェイス</OriginalScriptName> 
    <OriginalScriptName>アウェス、ハッサン・ダヒル</OriginalScriptName> 
    <OriginalScriptName>ウワイス、ハッサン・ターヒル</OriginalScriptName> 
</NameValue> 
</Name> 

使用DOM解析,解析XML並獲取值。

private static HashMap<String, String> nameDetails(Element nameDetails,String id) throws SQLException { 
     HashMap<String, String> Map = new HashMap<String, String>(); 
     Multimap<String, String> multiMap = ArrayListMultimap.create(); 
     String pid = null; 
     Map.put(pid, id); 
     if(nameDetails.hasChildNodes()){ 
      //System.out.println(nameDetails.getChildNodes().getLength()); 
      for(int i=0;i<nameDetails.getChildNodes().getLength();i++){ 
       //check "Name" has attributes or not 
       if(nameDetails.getChildNodes().item(i).hasAttributes()) 
       { 
        for(int a=0;a<nameDetails.getChildNodes().item(i).getAttributes().getLength();a++) 
        { 
         //Name Type values or attributes of Name 
         Map.put(nameDetails.getChildNodes().item(i).getAttributes().item(a).getNodeName(),nameDetails.getChildNodes().item(i).getAttributes().item(a).getNodeValue()); 
        } 
       } 
       //check "Name" has child nodes are not 
       if(nameDetails.getChildNodes().item(i).hasChildNodes()) 
       { 
        String d =null; 
        //No of child nodes "Name" Has that is no. of NameValue 
        for (int a=0;a<nameDetails.getChildNodes().item(i).getChildNodes().getLength();a++) 
        { 
         //No.of Childs Nodes NameValue has that is fName,lName,etc,. 
         for(int b=0;b<nameDetails.getChildNodes().item(i).getChildNodes().item(a).getChildNodes().getLength();b++) 
         {  Map.put(nameDetails.getChildNodes().item(i).getChildNodes().item(a).getChildNodes().item(b).getNodeName(),nameDetails.getChildNodes().item(i).getChildNodes().item(a).getChildNodes().item(b).getChildNodes().item(0).getNodeValue()); 
          }  StringClass.setValuesToDB(nameDetails.getNodeName(), Map); 

        } 
       } 
      } 
     } 
     return Map; 
    } 
在這種情況下

現在的問題是我們需要存儲的

<OriginalScriptName>حسن ظاهرعويس</OriginalScriptName> 
    <OriginalScriptName>ハッサン・ダヒル・アウェイス</OriginalScriptName> 
    <OriginalScriptName>アウェス、ハッサン・ダヒル</OriginalScriptName> 
    <OriginalScriptName>ウワイス、ハッサン・ターヒル</OriginalScriptName> 

多個值成逗號

حسن ظاهرعويس,ハッサン・ダヒル・アウェイス,アウェス、ハッサン・ダヒル,ウワイス、ハッサン・ターヒル 

分成map.so,我們可以得到價值事務所映射值,同時插入數據庫。

Map.get("OriginalScriptName","حسن ظاهرعويس,ハッサン・ダヒル・アウェイス,アウェス、ハッサン・ダヒル,ウワイス、ハッサン・ターヒル") 

    i.e., Map.get("OriginalScriptName",value) 
    let value = ,ハッサン・ダヒル・アウェイス,アウェス、ハッサン・ダヒル,ウワイス、ハッサン・ターヒル 

回答

0

我已經使用xpath來創建一個solution.create一個基於你的xml的java prog。 如果xml改變,那麼這個編將無法工作。 另一件事: 你的XML應該

<?xml version="1.0" encoding="UTF-8"?> 

爲你的XML開始包含不同的字符集,英文以外

如:

<?xml version="1.0" encoding="UTF-8"?> 
<Name NameType="Primary Name"> 
<NameValue> 
    <FirstName>Hassan</FirstName> 
    <MiddleName>Dahir</MiddleName> 
    <Surname>Aweys</Surname> 
    <OriginalScriptName>حسن ظاهرعويس</OriginalScriptName> 
    <OriginalScriptName>ハッサン・ダヒル・アウェイス</OriginalScriptName> 
    <OriginalScriptName>アウェス、ハッサン・ダヒル</OriginalScriptName> 
    <OriginalScriptName>ウワイス、ハッサン・ターヒル</OriginalScriptName> 
</NameValue> 
</Name> 

這裏的程序:

package com.xxxxx; 

import org.w3c.dom.*; 

import javax.xml.parsers.*; 
import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathFactory; 

import java.io.*; 
import java.util.HashMap; 
public class ReadXMLFileSax { 
     public static void main(String argv[]) { 
    try { 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document document = builder.parse(new File("D:\\xxxx.xml")); 

    Element root = document.getDocumentElement(); 

    XPath xPath = XPathFactory.newInstance().newXPath(); 
    NodeList nodes = (NodeList)xPath.evaluate("/Name[@NameType='Primary Name']/NameValue/OriginalScriptName", 
      document.getDocumentElement(), XPathConstants.NODESET); 
    String OriginalScriptName = ""; 
    HashMap<String, String> Map = new HashMap<String, String>(); 
    for (int i = 0; i < nodes.getLength(); ++i) { 
     Element e = (Element) nodes.item(i); 
     // System.out.println(e.getTextContent()); 
     OriginalScriptName = OriginalScriptName+","+e.getTextContent(); 
    } 
    System.out.println("OriginalScriptName "+OriginalScriptName.substring(1)); 
    Map.put("OriginalScriptName", OriginalScriptName.substring(1)); 
    }catch (Exception e) { 
    e.printStackTrace(); 
    } 

     } 
    } 

程序輸出如下所示:

OriginalScriptName حسن ظاهرعويس,ハッサン・ダヒル・アウェイス,アウェス、ハッサン・ダヒル,ウワイス、ハッサン・ターヒル 
+0

是否工作...... – barun