问题再次出现,虽然我已经在我的代码中成功实现了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将这些信息带入矢量......这是正确的吗?
现在又问题是我无法解析像“$”这样的特殊字符......这样有什么方法可以捕捉这些字符吗?
答案 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());
}
}