我有一个XML文件,我需要在其中搜索特定的标签并更新其值。问题在于,使用Sax解析器是“必须的”。我必须通过“仅”使用Sax解析器来找到这些标签,dom
stax j4dom dom4j解析器不在考虑范围之内。
我可以通过将xml文件转换为字符串并使用sax解析器对其进行解析并按StringBuilder
对象附加新值来完成此任务吗?可以吗 或您会推荐什么?
这是一个有效的代码,只需添加缺少的导入。它使用SAX并更改<name>user1</name>
为<name>user2</name>
。如果弄清楚它是如何工作的,还可以阅读SAX
API,则可以对xml进行任何操作。请注意,在StAX诞生之前,SAX被认为是最高效的xml解析器。
public static void main(String[] args) throws Exception {
String xml = "<users><user><name>user1</name></user></users>";
XMLReader xr = new XMLFilterImpl(XMLReaderFactory.createXMLReader()) {
private String tagName = "";
@Override
public void startElement(String uri, String localName, String qName, Attributes atts)
throws SAXException {
tagName = qName;
super.startElement(uri, localName, qName, atts);
}
public void endElement(String uri, String localName, String qName) throws SAXException {
tagName = "";
super.endElement(uri, localName, qName);
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (tagName.equals("name")) {
ch = "user2".toCharArray();
start = 0;
length = ch.length;
}
super.characters(ch, start, length);
}
};
Source src = new SAXSource(xr, new InputSource(new StringReader(xml)));
Result res = new StreamResult(System.out);
TransformerFactory.newInstance().newTransformer().transform(src, res);
}
主要内容:Java SAX解析器 修改XML文档的示例Java SAX解析器 修改XML文档的示例 需要修改的文件input.xml 编写修改XML文档的解析处理类 控制台输出结果为: 在项目根目录下生成新的文件input-updated.xml,内容如下:
问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax Implementation 让我
问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax实现 让我们从实现开始。 你首先必须
主要内容:Java SAX解析器 解析XML文档的示例Java SAX解析器 解析XML文档的示例 需要解析的文件input.xml 编写DefaultHandler的事件处理程序 编写核心解析处理类 输出结果为:
问题 你想读取一个XML文档,对它最一些修改,然后将结果写回XML文档。 解决方案 使用 xml.etree.ElementTree 模块可以很容易的处理这些任务。 第一步是以通常的方式来解析这个文档。例如,假设你有一个名为 pred.xml 的文档,类似下面这样: <?xml version="1.0"?> <stop> <id>14791</id> <nm>Clark &
问题内容: 我想使用SAX解析器解析xml文件中的一些数据。我的xml如下: 为了解析此数据,我扩展了DefaultHandler。 解析后的输出为: 为什么发生这种情况而不是得到: 问题答案: 我的猜测是,您将每次调用都视为交付元素的完整文本。您应该对处理程序进行编码,以便连续调用以累积文本,并且仅在事件发生时捕获它: