Android XML 解析省略“&”
Posted
技术标签:
【中文标题】Android XML 解析省略“&”【英文标题】:Android XML Parsing omitting "&" 【发布时间】: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 将这些信息放入向量中...这是正确的吗???
现在又一个问题是我无法解析像“$”这样的特殊字符……有什么办法可以捕捉到这些字符??
【问题讨论】:
【参考方案1】:不太确定您所看到的确切内容,如果这不能帮助您解决问题,也许您可以提供一些示例输入和输出。
&
是一个 XML 实体引用,表示 &
。
默认情况下,SAX 会为您进行转换,因此如果您的源 XML 显示 hello&goodbye
,您应该会看到 hello&goodbye
。
也可能是因为实体引用,SAX 正在中断对characters()
方法的调用。您可能需要将多个对characters()
的调用连接在一起,同时仍在同一个标签内。
【讨论】:
但还有 1 个疑问......我问这个问题很愚蠢,但空间会产生任何问题吗?? 顺便说一下,Brabster 能否提供一些相同的编码...这种情况……如何判断下一个字符是否为&??? 抱歉,我的电脑不在。很高兴您解决了您的问题。 在 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 能解决这个问题吗???以上是关于Android XML 解析省略“&”的主要内容,如果未能解决你的问题,请参考以下文章
在 android studio 中使用 Jsoup 解析 xml 数据
[翻译][Ruby教程]Nokogiri - 解析HTML/XML文档 / Parsing an HTML/XML Document