Dom4j 解析xpath路径带命名空间的xml文件

本文介绍了一个Java程序如何读取特定的XML文件,并通过XPath查询来获取文件中的元素信息。该程序利用SAXReader来解析XML文件,并展示了如何通过XPath表达式来定位到具体的元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xml文件内容如下:

<?xml version="1.0" standalone="yes"?>
<NewData>
  <xs:schema id="NewData" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="NewData">
      <xs:complexType>
          <xs:element name="Table">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="A0101" type="xs:string" />
                <xs:element name="A0102" type="xs:string" />
                <xs:element name="A0103" type="xs:string" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <Table>
    <A0101>1</A0101>
    <A0102>2</A0102>
    <A0103>3</A0103>
  </Table>
</NewDataSet>

 

java代码如下:

/**
  * configFileName : 文件的存放路径
  * @param configFileName
  */

 public void config(String configFileName){
     this.configFileName = configFileName;
     SAXReader reader = new SAXReader();
     Document document;
     try {

        //下面三行是最关键,将命名空间添加到xpath中,如果xpath路径不带命名空间,只需要取消如下三行代码,其他代码同样使用。
         Map<String, String> nameSpaceMap = new HashMap<String, String>();
         nameSpaceMap.put("xs", "http://www.w3.org/2001/XMLSchema");  
         reader.getDocumentFactory().setXPathNamespaceURIs(nameSpaceMap); 


         document = reader.read(configFileName);
         configDBConfig(document);
     } catch (DocumentException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
     } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
     }
 }
 
 
 private void configDBConfig(Document document) throws Exception  {
  
      //获得xs:sequence节点下所有子节点信息
      Element element1 = (Element)document.selectSingleNode ("NewData/xs:schema/xs:element/xs:complexType/xs:element/xs:complexType/xs:sequence");
      if(null == element1){return;}
          List elements1 = element1.elements();
          for (Iterator it = elements1.iterator(); it.hasNext();) {
          Element e = (Element) it.next();
          System.out.println("name = "+e.attribute("name").getText() + "   type = "+e.attribute("type").getText());
      }
  
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值