示例xml,
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Issue>
<Snippet>
sri;;
hiil
bye;
tc;
</Snippet>
</Issue>
是否可以将整个字符放入片段标签?
如果这是实施,
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
temp = "";
if (qName.equalsIgnoreCase("Issue")) {
acct = new Account();
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equalsIgnoreCase("Issue")) {
// add it to the list
accList.add(acct);
else if(qName.equalsIgnoreCase("Snippet"))
{
acct.setPrimarySnippet(temp);
}
O / p是tc;但我需要在片段标签内的整个值来打印。
答案 0 :(得分:2)
使用方法“characters”。
http://docs.oracle.com/javase/1.5.0/docs/api/org/xml/sax/helpers/DefaultHandler.html#characters(char [],int,int)
意思是,您必须实施startElement
和endElement
方法(表示您正在输入和退出'Snippet'标记,然后characters
方法将返回字符。
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
temp = "";
if (qName.equalsIgnoreCase("Issue")) {
someFlagVariable = true;
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equalsIgnoreCase("Issue")) {
someFlagVariable = false;
}
}
public void characters(char[] ch,
int start,
int length)
throws SAXException{
if (someFlagVariable ){
String content = new String(ch, start, length).trim(); //this is your content
}
}
答案 1 :(得分:0)
是
您应该在characters()方法中获取“temp”的值(您设置为主要代码段的值)。
但是,您应该知道不能保证何时执行characters(),并且可以在单个节点内多次调用。因此,在你覆盖characters()方法时,你需要构建一个字符串 - 当你到达endElement()时,你将获得完整的值。
您可以看到示例实现here
但你基本上想要这样的东西:
StringBuffer chars = new StringBuffer();
public void startElement(String uri, String localName, String qName, Attributes atts) {
chars = new StringBuffer();
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("Issue")) {
// add it to the list
accList.add(acct);
else if(qName.equalsIgnoreCase("Snippet")){
acct.setPrimarySnippet(chars);
}
}
public void characters(char ch[], int start, int length) {
chars.append(new String(ch, start, length));
}
(虽然注意,上面只有在你只关心叶子节点中的文本时才有效 - 因为我们在startElement()上新建了stringBuffer,如果你想要非叶子节点的文本那么你需要介绍startElement()方法中的标志,因此您只能在正确的时间重新实例化stringbuffer)
答案 2 :(得分:0)
1)要在Snippet中打印文本,你应该实现
public void characters(char ch[], int start, int length)
2)Snippet内的文本包含几行,使用SAX你将分别得到每一行,这种行为记录在SAX API中,它可能依赖于提供者,但至少使用JDK默认的SAX解析器你无法改变它。试试StAX,它有XMLInputFactory.IS_COALESCING选项来解决这个问题。