java获取xml命名空间的节点数据

当遇到xml携带命名空间。如果获取命名空间的节点值呢?

 

1.使用工具包工具包: org.dom4j

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.xpath.DefaultXPath;

maven依赖:(版本可自选择。如果使用其他版本发生冲突可使用此版本)


            dom4j
            dom4j
            1.1

 

2.主要方法:

 /**
     * @param xmlResult 数据xml
     * @param nodeName  节点名称
     * @param nameSpaceName  命名空间名称
     * @param nameSpaceUrl 命名空间url
     * @return
     * @throws DocumentException
     */
    public static String getResultByNodeNameForNameSpace(String xmlResult, String nodeName,String nameSpaceName,String nameSpaceUrl) throws DocumentException {
        Document doc = DocumentHelper.parseText(xmlResult);
        DefaultXPath xPath = new DefaultXPath("//" + nodeName);
        xPath.setNamespaceURIs(Collections.singletonMap(nameSpaceName, nameSpaceUrl));
        List list = xPath.selectNodes(doc);
        if (!list.isEmpty() && list.size() > 0) {
            Element node = (Element) list.get(0);
            return node.getText();
        }
        return "";
    }

3.示例 :例如我们有个xml



   
      
	  
         
            -1
            这是错误返回的记录
		 	
	    0
            这是正确返回的记录
         
		 
	  
            这是m的数据	
	    这是n的数据
         
		 
      
   

java获取xml命名空间的节点数据_第1张图片

4.使用一个main方法分别获取其中的值

   public static void main(String[] args) {
        String xmlResult="\n" +
                "" +
                     "" +
                         "" +
                             "" +
                                 "-1" +
                                 "这是错误返回的记录" +
                                 "0" +
                                 "这是正确返回的记录" +
                             "" +
                             "" +
                                 "这是m的数据" +
                                 "这是n的数据" +
                             "" +
                        "" +
                    "" +
                "";
        try {
            String errCoderesult = getResultByNodeNameForNameSpace(xmlResult, "a:errCode",
                    "a", "http://luch-a/2004/07/hn.DataAccess");

            String errMsgResult = getResultByNodeNameForNameSpace(xmlResult, "a:errMsg",
                    "a", "http://luch-a/2004/07/hn.DataAccess");

            String successMsg = getResultByNodeNameForNameSpace(xmlResult, "i:successMsg",
                    "i", "http://luch-i/2001/XMLSchema-instance");

            String merrCode = getResultByNodeNameForNameSpace(xmlResult, "m:errCode",
                    "m", "http://luch-m/2004/07/hn.DataAccess");
            
            System.out.println("这个是命名空间a中a:errCode的值:"+errCoderesult);
            System.out.println("这个是命名空间a中a:errMsg的值:"+errMsgResult);
            System.out.println("这个是命名空间i中i:successMsg的值:"+successMsg);
            System.out.println("这个是命名空间m中m:errCode的值:"+merrCode);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

java获取xml命名空间的节点数据_第2张图片

5.控制台打印:

java获取xml命名空间的节点数据_第3张图片

6.需要注意的点是

1.命名空间名称必修对应

2.命名空间的url必须对应的上。

3.标签名称为带冒号的那种,如a:errCode

 

 

 

 

 

 

 

你可能感兴趣的:(webservice,xml,JAVA)