2015-06-23 25 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