楼主: fry_2006

sax解析xml文档

[复制链接]
论坛徽章:
1
2009新春纪念徽章
日期:2009-01-04 14:52:28
21#
发表于 2008-11-23 22:10 | 只看该作者
他说了不用能DOM, 怎么玩xslt?

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
22#
发表于 2008-11-23 22:46 | 只看该作者
xslt就一定dom?

使用道具 举报

回复
论坛徽章:
1
2009新春纪念徽章
日期:2009-01-04 14:52:28
23#
发表于 2008-11-24 00:13 | 只看该作者
当然不一定,时间上没有不可能的。而且人们也总是在想把不可能变成可能,无论是在政坛上,还是在论坛上。如果你能给出个例子,我也好学学。请教。

使用道具 举报

回复
论坛徽章:
131
乌索普
日期:2017-09-26 13:06:30马上加薪
日期:2014-11-22 01:34:242014年世界杯参赛球队: 尼日利亚
日期:2014-06-17 15:23:23马上有对象
日期:2014-05-11 19:35:172014年新春福章
日期:2014-04-04 16:16:58马上有对象
日期:2014-03-08 16:50:54马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
24#
发表于 2008-11-24 00:30 | 只看该作者
http://www.theserverside.com/dis ... tss?thread_id=39323

三年做过xslt, 现在已经不熟了, 不知道链接那个例子对不对

使用道具 举报

回复
论坛徽章:
0
25#
 楼主| 发表于 2008-11-24 08:52 | 只看该作者

回复 #19 hongjinusa 的帖子

太感谢你们了,你们都是热心肠得人!
还没有解决,还是这个问题。实现没办法了,我用过滤器XMLFilter做的
public class DataItemFilter extends XMLFilterImpl {
public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
        {
                System.out.println(qName+"元素开始");
               
                dfaStack.push(dver);//把DFA的起始顶点压入栈中,这个顶点是存在的
                     System.out.println(dfaStack.peek());//能够取出刚才压入得元素,说明栈里确实压入了这个元素。
        }
}
压入以后,栈中有了元素,但是在另一个类中
public class ReportingContentHandler implements ContentHandler{
    DataItemFilter datafilter=new DataItemFilter();//首先创建了上面得类对象
    public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
        {
                      System.out.println(qName+"元素开始");
                       datafilter.dfaStack.peek(dver);//
                  }
}
这时候提示无法从dfaStack中取出,栈是空的。
我就感觉是对象引用过去了,但是没用把值带过去,这个我不知道该怎么写。谢谢你们了,我现在特别着急。

使用道具 举报

回复
论坛徽章:
0
26#
 楼主| 发表于 2008-11-24 08:53 | 只看该作者

回复 #19 hongjinusa 的帖子

你的想法是对的,我就用了if语句实现得。

使用道具 举报

回复
论坛徽章:
0
27#
 楼主| 发表于 2008-11-24 08:54 | 只看该作者

回复 #19 hongjinusa 的帖子

我后来问的问题是if语句处理得时候,在别的类里引用这个类得对象时出现得问题。

使用道具 举报

回复
论坛徽章:
1
2009新春纪念徽章
日期:2009-01-04 14:52:28
28#
发表于 2008-11-24 11:04 | 只看该作者
原帖由 justforregister 于 2008-11-23 11:30 发表
http://www.theserverside.com/dis ... tss?thread_id=39323

三年做过xslt, 现在已经不熟了, 不知道链接那个例子对不对


谢谢,我看了链接。这样的确可以把xml 转成另一个 xml,但并没有把xml解析成别的东东,当然这样再解析 xslt 生成的 xml 就可以了。也能解决问题。感谢。

使用道具 举报

回复
论坛徽章:
1
2009新春纪念徽章
日期:2009-01-04 14:52:28
29#
发表于 2008-11-24 11:31 | 只看该作者
原帖由 fry_2006 于 2008-11-23 19:52 发表
太感谢你们了,你们都是热心肠得人!
还没有解决,还是这个问题。实现没办法了,我用过滤器XMLFilter做的
public class DataItemFilter extends XMLFilterImpl {
public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
        {
                System.out.println(qName+"元素开始");
               
                dfaStack.push(dver);//把DFA的起始顶点压入栈中,这个顶点是存在的
                     System.out.println(dfaStack.peek());//能够取出刚才压入得元素,说明栈里确实压入了这个元素。
        }
}
压入以后,栈中有了元素,但是在另一个类中
public class ReportingContentHandler implements ContentHandler{
    DataItemFilter datafilter=new DataItemFilter();//首先创建了上面得类对象
    public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
        {
                      System.out.println(qName+"元素开始");
                       datafilter.dfaStack.peek(dver);//
                  }
}
这时候提示无法从dfaStack中取出,栈是空的。
我就感觉是对象引用过去了,但是没用把值带过去,这个我不知道该怎么写。谢谢你们了,我现在特别着急。


哈哈,很明显的错误。请看:
在class ReportingContentHandler 中
      DataItemFilter datafilter=new DataItemFilter();//首先创建了上面得类对象。你这里初始化了这个类,所以在这里他是空的。
然后,你在 ReportingContentHandler.startElement() 中 call
       datafilter.dfaStack.peek(dver);
       // 这当然是空的了。你都没放东西在里面,怎么拿得出来呢?你的确放了,但放到别的地方去了。

改成如下:
public class DataItemFilter extends XMLFilterImpl {
    private DataItemFilter datafilter = null;
    public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
        {
                if(datafilter == null)
                   datafilter=new DataItemFilter()


                System.out.println(qName+"元素开始");
               
                dfaStack.push(dver);//把DFA的起始顶点压入栈中,这个顶点是存在的
                     System.out.println(dfaStack.peek());//能够取出刚才压入得元素,说明栈里确实压入了这个元素。
        }
   public DataItemFilter getDatafilter(){ return datafilter; }
}

                     

public class ReportingContentHandler implements ContentHandler{
    DataItemFilter datafilter = null;
    public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException
        {
                      System.out.println(qName+"元素开始");

                      if(datafilter != null)
                           datafilter.dfaStack.peek(dver);//
         }

    public void set setDatafilter(DataItemFilter filter){ datafilter = filter; }
}

现在,在你的程序中,你就可以用了,在某个 function 里(英文里我们通常把它叫 driver),如下:

DataItemFilter item = new DataItemFilter ();
item.startElement(.......);

ReportingContentHandler  report = new  ReportingContentHandler ()
report.setDatafilter(item.getDataFilter());
report.sartElement(.......); // 在这里面,你就可以取出东西来了。

哈,你想想,你把东西放到你哥哥的口袋里,怎么能在你弟弟的荷包中取出来呢?

[ 本帖最后由 hongjinusa 于 2008-11-23 22:39 编辑 ]

使用道具 举报

回复
论坛徽章:
0
30#
 楼主| 发表于 2008-11-25 15:54 | 只看该作者

回复 #29 hongjinusa 的帖子

首先特别感谢你!
我试了一下,前两个类安你那样得做了,还是不行。
DataItemFilter item = new DataItemFilter ();
item.startElement(.......);

ReportingContentHandler  report = new  ReportingContentHandler ()
report.setDatafilter(item.getDataFilter());
report.sartElement(.......); // 在这里面,你就可以取出东西来了。

这段话我没理解。
我是要在ReportingContentHandler 里引用DataItemFilter类的对象及其值

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表