【问题标题】:Android XML Parsing omitting "&"Android XML 解析省略“&”
【发布时间】:2010-12-30 17:12:51
【问题描述】:

问题又是,虽然我已经成功地在我的代码中实现了一个 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 将这些信息放入向量中...这是正确的吗???

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

【问题讨论】:

    标签: xml android parsing sax


    【解决方案1】:

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

    & 是一个 XML 实体引用,表示 &

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

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

    【讨论】:

    • 但还有 1 个疑问......我问这个问题很愚蠢,但空间会产生任何问题吗??
    • 顺便说一下,Brabster 能否提供一些相同的编码...这种情况……如何判断下一个字符是否为&amp???
    • 抱歉,我的电脑不在。很高兴您解决了您的问题。
    • 在 android characters() 上确实在同一标签内被多次调用,因此对于输入“bob & jay”,将有三个单独的调用。
    【解决方案2】:

    这对 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());
    
                 }
            }
    

    【讨论】:

    • 其实我检查了很多东西,因为我的客户拥有的 XML 文件真的很乱...忘记你不理解的东西...我想你会理解其中的大部分... :)
    • 嗨,伙计们,问题又是我无法捕捉到像“$”和项目符号这样的特殊字符...在 SAX 解析中是否有出路,或者我们是否需要转向其他解析方法... JSON 能解决这个问题吗???
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2012-05-21
    • 2011-01-09
    相关资源
    最近更新 更多