【问题标题】:problem with using SAX XML Parser使用 SAX XML 解析器的问题
【发布时间】:2011-09-04 17:53:21
【问题描述】:

我正在使用 SAX 解析器进行 XML 解析。问题在于以下 XML 代码:

<description>
Designer:Paul Smith Color:Plain Black Fabric/Composition:100% cotton        Weave/Pattern:pinpoint Sleeve:Long-sleeved Fit:Classic Front style:Placket front Back style:Side pleat back Collar:Classic/straight collar Button:Pearlescent front button Pocket:rounded chest pocket Hem:Rounded hem
</description>

我明白了:

Designer:Paul Smith
Color:Plain Black 

其他部分不见了。同样的事情发生在其他几行。谁能告诉我我的方法有什么问题?

我的代码如下:

解析器代码:

try {
        /** Handling XML */
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();

        /** Send URL to parse XML Tags */
        URL sourceUrl = new URL(
        "http://50.19.125.224/Demo/VeryGoodSex_and_the_City_S6E6.xml");

        /** Create handler to handle XML Tags ( extends DefaultHandler ) */
        MyXMLHandler myXMLHandler = new MyXMLHandler();
        xr.setContentHandler((ContentHandler) myXMLHandler);
        xr.parse(new InputSource(sourceUrl.openStream()));

    } catch (Exception e) {
        System.out.println("XML Pasing Excpetion = " + e);
    }

保存 XML 解析信息的对象:

public class ParserObject {

String name=null;
String description=null;
String bitly=null; //single
String productLink=null;//single
String productPrice=null;//single
Vector<String> price=new Vector<String>();
}

处理程序类:

public void endElement(String uri, String localName, String qName)
throws SAXException {


    currentElement = false;


    if (qName.equalsIgnoreCase("title"))
    {
        xmlDataObject[index].name=currentValue;
    }

    else if (qName.equalsIgnoreCase("artist"))
    {
        xmlDataObject[index].artist=currentValue;
    } 

}


public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {


    currentElement = true;

    if (qName.equalsIgnoreCase("allinfo"))
    {
        System.out.println("started");
    }

    else if (qName.equalsIgnoreCase("tags"))
    {
        insideTag=1;
    } 

}

public void characters(char[] ch, int start, int length)
throws SAXException {

    if (currentElement) {
        currentValue = new String(ch, start, length);
        currentElement = false;
    }

}

【问题讨论】:

标签: java xml saxparser


【解决方案1】:

您必须连接解析器提供给您的字符,直到它调用endElement。

尝试从 characters 处理程序中删除 currentElement = false;,然后

currentValue = currentValue + new String(ch, start, length);

用空字符串初始化currentValue 或处理上面表达式中的null 值。

【讨论】:

    【解决方案2】:

    我认为字符会同时读取一些字符,但不会同时读取所有字符。 因此,您只会得到第一个“块”。 尝试在单独的行上打印每个字符块,作为调试(在 if 之前)。

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 2014-05-30
      • 2012-08-27
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多