在SAX解析器
问题描述:
删除空白,我有以下XML file.Why空格在characters()
即使在应用验证在SAX解析器
<Employee>
<Name>
James
</Name>
<Id>
11
</Id>
</Employee>
我想在标签之间显示文本后到来。
public class MyHandler extends DefaultHandler {
boolean isName = false;
boolean isId = false;
@Override
public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
if (isName) {
System.out.println(new String(arg0, arg1, arg2));
isName = false;
}
if (isId) {
System.out.println(new String(arg0, arg1, arg2));
isId = false;
}
}
@Override
public void startElement(String arg0, String arg1, String arg2,
Attributes arg3) throws SAXException {
if (arg2.equalsIgnoreCase("Name")) {
isName = true;
}
if (arg2.equalsIgnoreCase("Id")) {
isId = true;
}
}
}
期望输出继电器:
James
11
实际输出:
James
11
为什么空间战神在输出来吗?
答
如果使用validating parser它将通过ignorableWhitespace()
方法,而不是characters().
否则解析器完全有权给你空白通过characters().
见Javadoc报告忽略的空白。
答
文本节点的实际字符串值,是<Name>
标签的孩子
\nJames\n
同样,文本节点在<Id>
字符串值
\n11\n
其中\n
代表换行符。没有任何新行可以忽略空格。如果你想删除它们,你必须在Java代码中自己做。
答
如果您通过模式(XSD)验证程序放入XML并使用折叠所有空格的类型声明Name和Id的类型,则可以为您删除空白字符。键入xs:token。 DTD验证器不会为文本节点执行此操作(仅限于属性节点)。
它不会给我在标签之间的文字。 – Sanjana
@downvoter请解释。 – EJP
@Sanjana我不明白你的评论。请解释。 – EJP