一个xml的解析问题用SAX方法(急!!!!!!!!!!!!!!!!!!!!11)

nanye18 2003-12-12 10:35:40
有这样一个XML:
<Table>
<Line>
<LN>1afda晨奔驰</LN>
<LN></LN>
<LN>kjlhhioh;</LN>
<LN>50000PCS</LN>
<LN>sdhfgh</LN>
<LN></LN>
<LN>100000</LN>
<LN>USD</LN>
</Line>
</Table>
用SAX解析,要等到很一个<CL>节点的值,放入一个String中.请给个代码,谢谢!!!!!!!!!!!!!!!!
...全文
20 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nanye18 2003-12-13
楼上的方法虽好,可是我不能用xsl,只能写sax的解析.请大家给个与我给的xml内容一样的程序,因为我这里确实有"空原素"总出异常的问题.再谢~~~~~~~~~~`
  • 打赏
  • 举报
回复
gunandrose 2003-12-12
没明白你的意思
  • 打赏
  • 举报
回复
pigo 2003-12-12

干脆写个xsl,

用jaxp来转换输出得到。

这样还可以支持元素的无限扩展,也比避免了N多的Nullpotint判断。

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="Line">
<xsl:apply-templates select="LN"/>
</xsl:template>
<xsl:template match="LN">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
  • 打赏
  • 举报
回复
maxtiger 2003-12-12
//定义开始解析元素的方法. 将对应<xxxx v="">中的属性取出来
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
/*
if(qName.equals(LAST_UPDATE_TIME_TAG)){
String attr = attributes.getValue(LAST_UPDATE_TIME_ATTRIBUTE);
if(attr!=null){
try{
if(!XmlDAOImpl.checkLoadFileTime(Long.parseLong(attr),"flexValue")){
throw new SAXException("exit");
}
last_update_time_millis=Long.parseLong(attr);
}catch(NumberFormatException e){
throw new SAXException("NumberFormatException:"+attr+", get update xml file time error!");
}
}
}*/
if(qName.equals(RECORD)){
flexValue = new FlexValue();
flexValue.setFlexValue(attributes.getValue(FLEX_VALUE));
flexValue.setDescription(attributes.getValue(DESCRIPTION));
_flex_value_set_id=attributes.getValue(FLEX_VALUE_SET_ID);
flexValue.setFlexValueSetId(_flex_value_set_id);
flexValue.setFlexValueSetName(attributes.getValue(FLEX_VALUE_SET_NAME));
flexValue.setFlexValueId(attributes.getValue(FLEX_VALUE_ID));
return;
}
}

//这里是将<xxx></xxx>之间的值加入到currentValue
public void characters(char[] ch, int start, int length) throws SAXException {
//currentValue.append(ch, start, length);
}

//在遇到</xxx>结束后,将之前的名称和值一一对应保存在List中
public void endElement(String uri, String localName, String qName) throws SAXException {
if(flexValue!=null && qName.equals(RECORD) && _flex_value_set_id!=null){
//System.out.println(flexValue.getDescription());
ConfigObj.setFlexValue(flexValue,_flex_value_set_id);
}
}
  • 打赏
  • 举报
回复
delphi2java 2003-12-12
Top
  • 打赏
  • 举报
回复
noratong 2003-12-12
我书上的一个例子:
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.util.*;
import java.io.*;

public class sax extends DefaultHandler
{
Stack tags = new Stack();
String name;
String address;
String tel;
String fax;
String email;

public void endDocument() throws SAXException
{
System.out.println("----------Parse End------------");
}

public void startDocument() throws SAXException
{
System.out.println("---------Parse Begin-----------");
}

public void startElement(String p0, String p1, String p2, Attributes p3)throws SAXException
{
tags.push(p2);
}

public void endElement(String p0, String p1, String p2)throws SAXException
{
tags.pop();
if (p2.equals("PERSON"))
{
printout();
}
}

public void characters(char[] p0, int p1, int p2)throws SAXException
{
String tag = (String)tags.peek();

if (tag.equals("NAME"))
{
name = new String(p0,p1,p2);
}
else if (tag.equals("ADDRESS"))
{
address = new String(p0,p1,p2);
}
else if (tag.equals("TEL"))
{
tel = new String(p0,p1,p2);
}
else if (tag.equals("FAX"))
{
fax = new String(p0,p1,p2);
}
else if (tag.equals("EMAIL"))
{
email = new String(p0,p1,p2);
}
}

public void printout()
{
System.out.print("Name:");
System.out.println("name");
System.out.print("Address:");
System.out.println("address");
System.out.print("Tel:");
System.out.println("tel");
System.out.print("Fax:");
System.out.println("fax");
System.out.print("Email:");
System.out.println("email");
System.out.println();
}

public static void main(String[] args)
{
String filename = "candidate.xml";
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = null;

try
{
saxParser = spf.newSAXParser();
saxParser.parse(new File(filename),new sax());
}
catch (Exception e)
{
System.out.println(e);
System.exit(1);
}
}
}你可以依葫芦画瓢!!!!(只需改一下相应的名字就应该可以了)
xml内容:
<?xml version="1.0"?>
<!--DOCTYPE PEOPLE SYSTEM "people.dtd"-->
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair</NAME>
<ADDRESS>10 Downing Street, London, UK</ADDRESS>
<TEL>(061)98765</TEL>
<FAX>(061)98765</FAX>
<EMAIL>blair@everywhere.com</EMAIL>
</PERSON>
</PEOPLE>
  • 打赏
  • 举报
回复
nanye18 2003-12-12
有这样一个XML:
<Table>
<Line>
<LN>1afda晨奔驰</LN>
<LN></LN>
<LN>kjlhhioh;</LN>
<LN>50000PCS</LN>
<LN>sdhfgh</LN>
<LN></LN>
<LN>100000</LN>
<LN>USD</LN>
</Line>
</Table>
用SAX解析,要得到每一个<LN>节点的值,放入一个String中.请给个代码,谢谢!!!!!!!!!!!!!!!!
String中的内容为:1afda晨奔驰kjlhhioh;50000PCSsdhfgh100000USD
  • 打赏
  • 举报
回复
nanye18 2003-12-12
Sorry!是<LN>节点
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2003-12-12 10:35
社区公告
暂无公告