我有以下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)
如果使用了任何转义字符,那么我必须使用它。
答案 0 :(得分:1)
这里收集文本的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);
}
}
};
}
答案 1 :(得分:1)
您需要将字符() - 方法更改为
@Override
public void characters(char[] buffer, int start, int length) {
tmpValue += new String(buffer, start, length);
}
并且必须将startElement()方法中的tmpValue重置为“”。
答案 2 :(得分:0)
只需更改character()方法
即可obj.Fee = user_fee
并在endElement方法的最后一行添加。
@Override
public void characters(char[] buffer, int start, int length) {
tmpValue += new String(buffer, start, length);
}