- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 <page>
内捕获文本我的 XML 文件的标签。整个文本,以及其他标签、它们的属性等。我可以使用例如正则表达式来做到这一点,但我需要这样做是安全的,所以我想使用 SAXParser。
但恐怕 ContentHandler 可以从 SAXParser 接收到的所有信息都不足以执行此操作(例如,找到的 XML 标记开头的光标位置会有很大帮助)。
那么,还有其他安全的方法吗?
而不是 <page>
中的文本,例如,它可能是 DOM 树,但为了性能,我更喜欢第一种方式。
最佳答案
好的,我首先要做的是为自己创建一个自定义 DefaultHandler
类似下面的内容;
public class PrintXMLwithSAX extends DefaultHandler {
private int embedded = -1;
private StringBuilder sb = new StringBuilder();
private final ArrayList<String> pages = new ArrayList<String>();
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName.equals("page")){
embedded++;
}
if(embedded >= 0) sb.append("<"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if(embedded >= 0) sb.append(new String(ch, start, length));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(embedded >= 0) sb.append("</"+qName+">");
if(qName.equals("page")) embedded--;
if(embedded == -1){
pages.add(sb.toString());
sb = new StringBuilder();
}
}
public ArrayList<String> getPages(){
return pages;
}
}
DefaultHandler
(解析时)遍历每个元素并调用 startElement()
, characters()
, endElement()
和其他一些人。上面的代码检查 startElement()
中的元素是否是 <page>
元素。如果是这样,它会递增 embedded
通过 1. 之后,每个方法检查是否 embedded
>= 0。如果是,它将每个元素内的字符及其标签(不包括此特定示例中的属性)附加到 StringBuilder
目的。 endElement()
减量 embedded
当它找到 </page>
的结尾时元素。如果 embedded 回退到 -1,我们知道我们不再在一系列页面元素中,因此我们添加 StringBuilder
的结果。到 ArrayList
pages
并开始新的StringBuilder
等待另一个<page>
元素。
然后您需要运行处理程序然后检索您的 ArrayList
包含您的 <page>
的字符串像这样的元素;
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
PrintXMLwithSAX handler = new PrintXMLwithSAX();
InputStream input = new FileInputStream("C:\\Users\\me\\Desktop\\xml.xml");
saxParser.parse(input, handler);
ArrayList<String> myPageElements = handler.getPages();
现在myPageElements
是一个 ArrayList
包含所有页面元素及其内容作为字符串。
希望对您有所帮助。
关于java - 在 SAXParser 中捕获部分 XML 代码的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24085292/
我曾经使用 Android 单元测试运行我的单元测试,但后来切换到使用 Robolectric 的 Java 单元测试。我注意到使用 SaxParser DefaultHandler 的不同之处。基本
我有一个 Java SAXparser,可以使用 parse(new InputSource(conn.getInputStream())) 下载和解析。不幸的是,有时在下载站点的 xml 时会出现错
我有一个java类,它解析xml文件,并将其内容写入MySQL。一切正常,但问题是当 xml 文件包含无效的 unicode 字符时,会引发异常并且程序停止解析文件。 我的提供商每天都会发送此 xml
我正在为 Android 开发 RSS 提要阅读器,并且为了解析 XML 文件,我使用 SAX API。问题是,在解析数据时,一些文本在一些随机选择的标签中以随机方式被截断(我的意思是同一标签的不同实
我有 xml 结构 id dataTitle title1 title2 我想解析它并仅将标题元素保存在条目下的列表中。如何在
我有一个 org.xml.sax.helpers.DefaultHandler 的实现,它工作正常,除非它出现这样的情况: Jiří Bárta 字符方法被重写为: @O
如果我在 ansi xml 文件中放入一个 utf8 字符 » 并尝试使用 SAXParser 解析它,那么它的解析不会出现任何错误。为什么它没有抛出任何异常? 示例 xml 文件。保存为ansi编码
这很奇怪.. 我有一个 DefaultHandler,它实际上可以很好地处理所有事情,但有时,没有明显的原因,它会给我 0 而不是正确的值。这种情况每次都在同一个地方发生,所以有问题,但我不知道是什么
我在 android/java 上用 SAXParser 等做一些简单的 SAXParsing 它可以正确解析文件,但是当它遇到一些特殊字符时会打嗝,例如如果它解析下面这个 xml: 当它在
我正在尝试构建我的第一个 XML 模式 validator 作为我的代码库和许多项目中的可重用组件。我花了一整天的时间尝试遵循示例并对其进行编码,现在已经启动并运行了概念验证。 唯一的问题是,它给了我
我正在使用 saxparser 来从文件中获取 xml 标签内容。对于非长数据 xml,一切正常。然而,当到达某个位置时,characters() 事件收到截断的 ch[] 并被触发两次。例如,123
我在 Android 应用程序中使用 SAX 解析器一次读取一些提要。脚本执行如下。 // Begin FeedLezer
我有以下格式的 XML: ... "Paul McCartney" "John Lennon" ... SAXParser 一旦到达电子邮件地址就会抛出异常。它认为是一个 XML 元素,一旦遇到
我在 Java 中使用 SAXParser。 有没有办法在使用 SAXParser 解析 xml 时关闭转义? 例如,我有以下 xml: „title” 我想通过c
我正在查看http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPSAX9.html 。 您可以通过两种方式将 xml 文件与架构关联起来:在应用程序中或
我正在开发一个小型应用程序,该应用程序使用 xml 文件来打印章节的 ArrayList,后者又指向特定的 html 文件。 我使用本教程开始:http://www.anddev.org/novice
我正在向 SAXParser 传递一个 XML 文件和一个处理程序,但收到此错误: parse 方法的属性定义为 (File, DefaultHandler) ,它完全匹配,所以我不确定哪里出错了。完
我需要使用一组模式对传入的 XML 片段执行一些验证。 所有这些架构共享相同的 targetNamespace,但分为不同的 .xsd 文件。 我的java程序正在将每个xsd文件加载到InputSo
我不知道如何正确表达这个问题,但我会举一个例子。 假设我想知道标签block的属性type我可以 if (localName == "block") { int type = Integer
PARAMETRI: vrednost: 2.0 rank: 0.75 − objekt: irc.kis.model.pomozniRazredi.CasovniInterval.CasovniI
我是一名优秀的程序员,十分优秀!