Java 使用SaxParser修改xml属性
我有一个XML,其中我想使用SAXParser为特定节点修改link属性的值 我确实找到了,并在我的案例中使用了Attributes2Impl 到目前为止,我所拥有的:Java 使用SaxParser修改xml属性,java,xml,sax,saxparser,Java,Xml,Sax,Saxparser,我有一个XML,其中我想使用SAXParser为特定节点修改link属性的值 我确实找到了,并在我的案例中使用了Attributes2Impl 到目前为止,我所拥有的: SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); UpdateLinksHandler linksHandler = new UpdateLinksHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
UpdateLinksHandler linksHandler = new UpdateLinksHandler();
saxParser.parse(xml, linksHandler);
@覆盖
public void startElement(字符串uri、字符串键、字符串qName、属性)引发SAXException{
if(qName.equalsIgnoreCase(USEROBJECT)){
字符串链接=attributes.getValue(“链接”);
如果(链接!=null){
Attributes2 attrs=(Attributes2)属性;
Attributes2Impl newAttrs=新的Attributes2Impl();
对于(int i=0;i
但我不知道我的方法是否正确,或者我应该如何得到修改后的xml,或者SAXParser只是为了阅读目的
谢谢SAX解析部分将读取您的XML,而不是编写它。如果您有XML文档的模式,并且文档的大小可以预测,并且您知道自己有足够的内存,那么使用JAXB将文档加载到DOM中,更改DOM,然后将DOM重新整理成XML字符串可能是最简单的方法。或者您可以使用像Woodstox这样的StAX解析器,它允许您将从输入流读取的“事件”直接复制到输出流。谢谢!同时我也尝试了Java DOM解析器,这也很有效。
@Override
public void startElement(String uri, String key, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase(USEROBJECT)) {
String link = attributes.getValue("link");
if (link != null) {
Attributes2 attrs = (Attributes2) attributes;
Attributes2Impl newAttrs = new Attributes2Impl();
for (int i = 0; i < attrs.getLength(); i++) {
if (attrs.isSpecified(i)) {
String type = attrs.getType(i);
String value = attrs.getValue(i);
String name = attrs.getQName(i);
if (name == "link") {
value = modifyLink(value);
}
newAttrs.addAttribute(null, null, name, type, modifyLink(value));
}
}
super.startElement(uri, key, qName, newAttrs);
}
}