XML的java解析- -

* SAX API是基于事件的。实现了 SAX APIXML 解析器跟据解析到的 XML 文档的不同特征产生事件。通过在 Java 代码中捕捉这些事件,就可以写出由 XML 数据驱动的程序。

    解析过程中需要XML解析器,Apache Xerces就是其中的一种,可以从http://xml.apache.org/dist/xerces-j/ 下 载需要的解析器代码,解压缩程序后,将生成的xercesSamples.jar, xercesImpl.jar, xml-apis.jar,xmlParserAPIs.jar加入到系统的classpath中(或者xerces.jar,在1.4.4版本中,该 jar文件相当于上述jar的集合)。

   并且指定解析程序需要的编译器,有两种方式指定:

1)在主程序中,进行解析前,即 XMLReader xr = XMLReaderFactory.createXMLReader(); 添加如下代码:

System.setProperty("org.xml.sax.driver","org.apache.xerces.parsers.SAXParser");

2)使用下面的命令,进行编译执行:

java -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser Example2,Example2为主程序名称;

  使用SAX API 的主要任务就是创建一个实现 ContentHandler 接口,一个供 XML 解析器调用以将分析 XML 文档时所发生的 SAX 事件分发给处理程序的回调接口。SAX API 也提供了一个已经实现了 ContentHandler 接口的 DefaultHandler 适配器类。

  在DefaultHandler中,提供了如下的方法进行重载:

    startDocument, endDocument, startElement, endElement, characters,这几种方法;

   对于如下的xml文档:

   <?xml version="1.0"?>
        <simple date="7/7/2000" >
        <name> Bob </name>
        <location> New York </location>
   </simple>

   进行解析的顺序如下:

     Example1 SAX Events:
    SAX Event: START DOCUMENT
    SAX Event: START ELEMENT[ simple ]
   ATTRIBUTE: date VALUE: 7/7/2000
   SAX Event: CHARACTERS[  ]
SAX Event: START ELEMENT[ name ]
SAX Event: CHARACTERS[  Bob  ]
SAX Event: END ELEMENT[ name ]
SAX Event: CHARACTERS[   ]
SAX Event: START ELEMENT[ location ]
SAX Event: CHARACTERS[  New York  ]
SAX Event: END ELEMENT[ location ]
SAX Event: CHARACTERS[  ]
SAX Event: END ELEMENT[ simple ]
SAX Event: END DOCUMENT

即在解析的过程中,会调用我们extends DefaultHandler的方法,例如解析开始,先动用startDocument方法,然后遇到<simple>后,调用startElement等。在调用的过程中,将中间解析到的结果存放在中间变量中:

  例如: 

public void startElement( String namespaceURI,  String localName, String n ame,     Attributes attr ) throws SAXException {

     System.out.println( "SAX Event: START ELEMENT[ " +
      localName + " ]" );  

   //Also, let's print the attributes if
  // there are any...
                for ( int i = 0; i < attr.getLength(); i++ ){
                   System.out.println( "   ATTRIBUTE: " +
                   attr.getLocalName(i) +  " VALUE: " +   attr.getValue(i) );
      }
 

解析程序,将中间结果存放在namespaceURL,localName,name,以及Attributes attr中,用户扩展的程序中,可以将这些结果读取出来,判断是否是自己需要的,如果是那么进行处理。

   因此SAX,是数据驱动的。

这是SAX的最基本的原来,还有些问题需要处理:例如,在xml中,不同位置的element元素名称相同,在SAX API中,如何处理呢,可以使用Stack将不同元素的路径保存在堆栈中,使用元素的路径名来判别不同位置的元素。或者其他的问题;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,可以使用 Apache XML-RPC 库来解析 XML-RPC 返回的 XML 数据。 1. 解析 XML-RPC 返回的 XML 数据 可以通过以下代码来解析 XML-RPC 返回的 XML 数据: ``` XmlRpcStreamResponseConfig respConfig = new XmlRpcStreamResponseConfig(); XmlRpcStreamResponse resp = new XmlRpcStreamResponse(respConfig); InputStream is = ... // 从网络或文件中读取返回的 XML 数据 resp.parse(is); XmlRpcValue value = resp.getReturnValue(); ``` 其中,respConfig 是返回配置对象,is 是返回的 XML 数据的输入流,value 是解析后的返回值。 需要注意的是,在解析 XML-RPC 返回的 XML 数据时,需要使用 XmlRpcStreamResponse 对象,而不是 XmlRpcStreamRequest 对象。 2. 获取 XML-RPC 返回值 可以通过以下代码来获取 XML-RPC 返回值: ``` if (value.getType() == XmlRpcValue.TYPE_STRUCT) { Map<String, Object> struct = new HashMap<String, Object>(); XmlRpcStruct rpcStruct = (XmlRpcStruct) value; for (String key : rpcStruct.keySet()) { struct.put(key, rpcStruct.get(key).getValue()); } // 处理结构体类型的返回值 } else if (value.getType() == XmlRpcValue.TYPE_ARRAY) { List<Object> list = new ArrayList<Object>(); XmlRpcArray rpcArray = (XmlRpcArray) value; for (int i = 0; i < rpcArray.size(); i++) { list.add(rpcArray.get(i).getValue()); } // 处理数组类型的返回值 } else { Object result = value.getValue(); // 处理其他类型的返回值 } ``` 其中,value 是返回值,通过 getType() 方法可以获取返回值的类型,如果是结构体类型,则可以通过 XmlRpcStruct 对象获取结构体中的键值对;如果是数组类型,则可以通过 XmlRpcArray 对象获取数组中的元素;否则,直接通过 getValue() 方法获取返回值。 以上就是 Java 解析 XML-RPC 返回的 XML 数据的基本步骤。通过 Apache XML-RPC 库,可以方便地进行 XML-RPC 返回数据的解析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值