java - 使用 SAX 解析器解析包含特殊字符 "/"的值给出错误的输出

标签 java xml sax saxparser

我有以下 xml 结构

  <fs:AsReportedItem>
     <fs:BookMark>/BODY[1]/DIV[3135]/DIV[0]/TABLE[0]/TBODY[0]/TR[32]/TD[5]/DIV[0]/FONT[0]/substr(1,2)
     </fs:BookMark>
  </fs:AsReportedItem>

我正在使用 SAX 进行解析并在 endElement() 方法中读取税值

这是我的示例代码

private void parseDocument() {
        // parse
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            SAXParser parser = factory.newSAXParser();
            parser.parse(FileName, this);
        } catch (ParserConfigurationException e) {
            System.out.println("ParserConfig error");
        } catch (SAXException e) {
            System.out.println("SAXException : xml not well formed");
        } catch (IOException e) {
            System.out.println("IO error");
        }
    }

public void startElement(String s, String s1, String elementName, Attributes attributes) throws SAXException {

if (OrgDataPartitonObj != null && "fs:FinancialStatementLineItemDataItem".equals(OrgDataPartitonObj.getType())) {

                FinancialStatementLineItemParser.startFinancialStatementLineItemParser(OrgDataPartitonObj,financialStatementLineItemObj, elementName, attributes);

            }
        }


public void endElement(String s, String s1, String element) throws SAXException {

if (OrgDataPartitonObj != null && "fs:FinancialStatementLineItemDataItem".equals(OrgDataPartitonObj.getType())) {

                 FinancialStatementLineItemParser.getEndElementFinancialStatementLineItemParser(financialStatementLineItemObj, element, tmpValue);
        }
}


public static void getEndElementFinancialStatementLineItemParser(FinancialStatementLineItem financialStatementLineItemObj, String element, String tmpValue) {

            if (element.equals("fs:BookMark")) {
            financialStatementLineItemObj.setBookMark(tmpValue);
        }

    }
   @Override
    public void characters(char[] buffer, int start, int length) {
        tmpValue = new String(buffer, start, length);
    }

当我调试时,我只能看到这个值 /substr(1,2) 所有带有 "/" 的值都被转义了

我不知道为什么我没有获得完整的值/BODY[1]/DIV[3135]/DIV[0]/TABLE[0]/TBODY[0]/TR[32]/TD[5 ]/DIV[0]/FONT[0]/substr(1,2)

如果使用了任何转义字符,那么我必须使用 。

最佳答案

这里是收集文本的 DefaultHandler 的源代码:

private static DefaultHandler getHandler() {
    return new DefaultHandler() {
        String text;

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes)
                throws SAXException {
            if ("BookMark".equals(qName)) {
                text = "";
            }
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            text += new String(ch).trim();
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            if ("BookMark".equals(qName)) {
                System.out.println("endElement: " + text);
            }
        }

    };
}

关于java - 使用 SAX 解析器解析包含特殊字符 "/"的值给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47467052/

相关文章:

java - 从大 xml 文件中提取大 xml block 的最佳方法

java - 如何等待 Selenium webdriver 中的警报?

java - 如何限制 SAX 解析器处理程序类中调用 'startElement()' 的次数?

java - 使用它的客户端 API 解析深度嵌套的 elasticsearch 聚合

json - 将默认 REST 响应更改为 JSON 而不是 XML

xml - Groovy XmlSlurper 和插入子节点

android - 我可以使用 SAX 解析器解析二进制 XML 文件(在 res/xml 中)吗

java - 找不到 bundle java.util.PropertyResourceBundle 的资源

java - 帮助构建正则表达式

java - 过滤器是否应该在过滤期间或之后写入响应?