3

问题再次是,虽然我已经在我的代码中成功地实现了一个 SAX 解析器......它的行为很奇怪。它只是跳过 & 之后的条目并转到下一个条目。只是想知道这是 SAX 解析器的典型工作还是错误地实现它???

我已经实现了 org.xml.sax.ContentHandler 并在里面提供了以下编码......

`

public void characters(char[] ch, int start, int length)
         {
             if(lastName.equals("id"))
             {
                 String id = String.copyValueOf(ch, start, length);
                 CustomList.idvector.add(id);
             }
             else if(lastName.equals("subcategory"))
             {
                String subcategory = String.copyValueOf(ch, start, length);
                 CustomList.subcategoryvector.add(subcategory);
             }
             else if(lastName.equals("photo"))
             {
                 String photo = String.copyValueOf(ch, start, length);
                 CustomList.photovector.add(photo);
             }
             else if(lastName.equals("name"))
             {
                 String name = String.copyValueOf(ch, start, length);
                 CustomList.namevector.add(name);
             }
         }

`

有些元素带有标签 ,,,... 并且 m 将这些信息放入向量中...这是正确的吗?

现在又一个问题是我无法解析像“$”这样的特殊字符等等......有什么办法可以捕捉到这些字符?

4

2 回答 2

4

不太确定您所看到的确切内容,如果这无助于解决您的问题,也许您可​​以提供一些示例输入和输出。

&是一个 XML 实体引用和手段&

默认情况下,SAX 将为您进行转换,因此如果您的源 XML 显示hello&goodbye您应该看到hello&goodbye.

也可能是characters()因为实体引用,SAX 正在分解对方法的调用。您可能需要将多个调用连接characters()在一起,同时仍在同一个标​​签内。

于 2009-12-29T08:07:46.410 回答
1

这对我有用 4 个人......谢谢布拉布斯特......

public void characters(char[] ch, int start, int length)
             {
                 if(lastName.equals("id") && (lastName != lastElementTraversed))
                 {
                     String s = new String(ch, start, length);
                     if (appendedid == null) 
                     {
                         appendedid = new StringBuffer(s);
                     } else {
                          appendedid.append(s);
                     }

                 }
            else if(lastName.equals("subcategory")&& (lastName !=lastElementTraversed))
                 {
                     String s = new String(ch, start, length);
                     if (appendedsub == null) {
                         appendedsub = new StringBuffer(s);
                      } else {
                          appendedsub.append(s);
                      }
                     //lastElementTraversed = lastName;
                 }
            else if(lastName.equals("photo")&& (lastName != lastElementTraversed))
                 {
                     String s = new String(ch, start, length);
                      if (appendedphoto == null) {
                          appendedphoto = new StringBuffer(s);
                      } else {
                          appendedphoto.append(s);
                      }
                      //lastElementTraversed = lastName;
                 }
            else if(lastName.equals("name") && (lastName != lastElementTraversed))
                 {
                     String s = new String(ch, start, length);
                      if (appendedname == null) {
                          appendedname = new StringBuffer(s);
                      } else {
                          appendedname.append(s);
                      } 
                      //lastElementTraversed = lastName;
                 }
             }
    public void startElement(String uri, String localName, String qName, Attributes atts)
            {
                lastName = localName;
                appendedid=null;
                appendedsub=null;
                appendedphoto=null;
                appendedname=null;

            }

             public void endElement(String uri, String localName, String qName)
             {
                 lastElementTraversed = localName;
                 if(localName.equals("category"))
                    {
                        appendedid=null;
                        appendedsub=null;
                        appendedphoto=null;
                        appendedname=null;

                    }

                     if(appendedid!=null)
                     CustomList.idvector.add(appendedid.toString());
                     if(appendedsub!=null)
                     CustomList.subcategoryvector.add(appendedsub.toString());
                     if(appendedphoto!=null)
                     CustomList.photovector.add(appendedphoto.toString());
                     if(appendedname!=null)
                     CustomList.namevector.add(appendedname.toString());

             }
        }
于 2009-12-29T12:03:04.937 回答