📄 mysaxpa.ja
字号:
namespaceURI = "没有命名空间";
}
System.out.println( ", 命名空间: " + namespaceURI +
", 新名称: " + qName + ".");
//打印属性
for(int i=0; i<atts.getLength(); i++)
System.out.println( "\t属性名称: " + atts.getLocalName(i) +
" = " + atts.getValue(i) + ".");
}
/**
*接受元素结束的调用
*
*<p>
*SAX分析器会在XML文件中遇到的每一个元素的结尾调用此函数。
*每一个{@link #startElement startElement}事件一定会有一
*个相对应的{@link #startElement startElement}事件
*</p>
* @param uri 命名空间的统一资源标识符。当该元素没有名称
*空间时或是分析器没有启动命名空间功能时,此字符串就会为空
* @param localName 没有前置字符串的元素名称。如果分析器没
*有启动命名空间功能时,此字符串为空。
* @param qName 完整的元素名称。如果新名称如法取得时,此
*字符串为空。
* @param atts 附加在这个元素上的全部属性。如果该元素没
*有任何属性,则会返回一个空的Attributes对象。注意,不是
*空(null)。
*
* @exception org.xml.sax.SAXException 任何的SAX异常,有
*可能是封装过的其他异常处理
*/
public void endElement (String namespaceURI, String localName,
String qName)
throws SAXException{
System.out.print("元素结束: " + localName);
if(namespaceURI.equals("")) {
namespaceURI = "没有命名空间";
}
System.out.println( ", 命名空间: " + namespaceURI +
", 新名称: " + qName + ".");
}
/**
*接受字符数据调用
*
*<p>
*分析器会调用这个函数来回报在元素里的一块块字符数据。SAX
*分析器会返回在一个在同一区块里的连续字符串。
*</p>
*
*<p>
*要注意的是,千万不要去读取超过范围的字符串,SAX分析器对此
*不做任何保证。
*</p>
*
* @param ch 从XML文件中取得的字符
* @param start 有效字符在阵列中的开始位置
* @param length 有效字符的长度
* @exception org.xml.sax.SAXException 任何的SAX异常,有
*可能是封装过的其他异常处理
* @see #ignorableWhitespace
* @see org.xml.sax.Locator
*/
public void characters (char ch[], int start, int length)
throws SAXException{
String charData = new String(ch, start, length);
System.out.println("字符数据: \"" + charData + "\"");
}
/**
*接受在元素的内容里可忽略的空格调用
*<p>
*一个可验证的分析器一定要使用这个函数来回报出现在元素内
*容中的可忽略空格符,参见W3C XML 1.0 recommendation,
*的第2.10小节。至於不具验证功能的分析器则不在此限,可以
*依照其设计的方法来决定是否使用此函数。
*</p>
*
*<p>
* SAX分析器可以把连续的空白在一次调用传入程序里,也可以
*分成多个调用来传入程序。唯一的限制就是一次的调用理所传
*回的空格符一定要位在同一个实体里,如果要知道目前的空
*白是属於哪一个实体的,可以使用Locator对象来提供这些讯息。
*</p>
*
*<p>
*和characters()一样,不要读取超出限定范围之外的数据
*</p>
*
* @param ch 从XML文件中取得的字符
* @param start 空格符在阵列中的开始位置
* @param length 空格符的长度
* @exception org.xml.sax.SAXException 任何的SAX异常,有
*可能是封装过的其他异常处理
* @see #characters
*/
public void ignorableWhitespace (char ch[], int start, int length)
throws SAXException{
String whiteSpace = new String(ch, start, length);
System.out.println("空格符: \"" + whiteSpace + "\"");
}
/**
*接受处理命令(process instruction)的调用
*
*<p>
*每次遇到处理命令是,分析器就会调用一次这个函数,而且它
*们有可能会出现在文件的主要元素(root)之前。
*</p>
*
* @param target 处理命令的目标(target).
* @param data 处理命令的数据,如果没有任何数据就会返回
*空(null),不过这些数据并不包含那些目标和数据间的空白。
* @exception org.xml.sax.SAXException 任何的SAX异常,
*有可能是封装过的其他异常处理
*/
public void processingInstruction (String target, String data)
throws SAXException{
System.out.println("处理命令 目标(target):" + target
+ " 和其数据(data):" + data);
}
/**
*接受被忽略的实体参照调用
*
*<p>
*每次分析器忽略了一个实体时,就会调用此函数。
*</p>
*
* @param name 被忽略的实体名称
* @exception org.xml.sax.SAXException 任何的SAX异常,
*有可能是封装过的其他异常处理
*/
public void skippedEntity (String name)
throws SAXException{
System.out.println("忽略的实体: " + name);
}
}// :) MyContentHandler
/**
*<code>MyErrorHandler</code>实做<code>org.xml.sax.
*ErrorHandler</code>界面,并且提供提供相关的回调方法。
*所有在分析XML文件时所遇到的问题都会由这些函数传入。
*/
class MyErrorHandler implements ErrorHandler {
/**
*接受警告调用
*<p>
*一般来说,SAX分析器会使用这个函数来回报不属于XML 1.0
*Recommendation中的error和fatal error的状况。这个函数默
*认的处理方事就是不做任何事。
*</p>
* @param exception 用SAXParseExceptoin所封装起来的警告
* @exception org.xml.sax.SAXException 任何的SAX异常,
*有可能是封装过的其他异常处理
* @see org.xml.sax.SAXParseException
*/
public void warning (SAXParseException e)
throws SAXException {
System.out.println(
"----分析警告----\n" +
" 发生位置:\t\t第" + e.getLineNumber() + "行, " +
"第" + e.getColumnNumber() + "字\n" +
" 系统标识符:\t" + e.getSystemId() + "\n" +
" 公用标识符:\t" + e.getPublicId() + "\n" +
" 错误消息:\t\t" + e.getMessage()
);
throw new SAXException("遇到警告.", e);
}
/**
*接受可恢复的错误调用
*
*<p>
*这个函数负责所有和XML 1.0 Recommendation的section 1.2
*里所定义的"error"状况。通常都是在验证的过程里,有某些
*XML的限制被违反了,但是还是可以继续分析下去的情况。
*</p>
* @param exception 用SAXParseExceptoin所封装起来的警告
* @exception org.xml.sax.SAXException 任何的SAX异常,
*有可能是封装过的其他异常处理
* @see org.xml.sax.SAXParseException
*/
public void error (SAXParseException e)
throws SAXException{
System.out.println(
"----可恢复的分析错误----\n" +
" 发生位置:\t\t第" + e.getLineNumber() + "行, " +
"第" + e.getColumnNumber() + "字\n" +
" 系统标识符:\t" + e.getSystemId() + "\n" +
" 公用标识符:\t" + e.getPublicId() + "\n" +
" 错误消息:\t\t" + e.getMessage()
);
throw new SAXException("遇到可恢复错误.", e);
}
/**
*接受不可恢复的错误调用
*
*<p>
*这个函数负责所有和XML 1.0 Recommendation的section 1.2
*里所定义的"fatal error" 状况。一旦这个错误发生后,这份
*文件就不应该再继续被分析,所有和SAX 分析器有关的程序都
*应该在此时终止。
*</p>
*
* @param exception 用SAXParseExceptoin所封装起来的警告
* @exception org.xml.sax.SAXException 任何的SAX异常,
*有可能是封装过的其他异常处理
* @see org.xml.sax.SAXParseException
*/
public void fatalError (SAXParseException e)
throws SAXException{
System.out.println(
"----不可恢复的分析错误----\n" +
" 发生位置:\t\t第" + e.getLineNumber() + "行, " +
"第" + e.getColumnNumber() + "字\n" +
" 系统标识符:\t" + e.getSystemId() + "\n" +
" 公用标识符:\t" + e.getPublicId() + "\n" +
" 错误消息:\t\t" + e.getMessage()
);
throw new SAXException("遇到不可恢复错误.", e);
}
}// :) end of MyErrorHandler
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -