Android XML解析省略“&”

时间:2009-12-29 08:02:34

标签: xml android parsing sax

问题再次出现,虽然我已经在我的代码中成功实现了SAX解析器......它表现得很糟糕。它会在& amp;之后跳过肠圈。并转到下一个条目。只是想知道这是否是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将这些信息带入矢量......这是正确的吗?

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

2 个答案:

答案 0 :(得分:4)

不太确定您所看到的内容,如果这对您的问题没有帮助,也许您可​​以提供一些示例输入和输出。

&是XML实体引用,表示&

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

由于实体引用,SAX可能正在分解对characters()方法的调用。您可能需要将多个调用连接到characters(),同时仍在同一个标​​记内。

答案 1 :(得分:1)

这让我有4个人...... Thanx Brabster ......

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());

             }
        }