Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SaxParser修改xml属性_Java_Xml_Sax_Saxparser - Fatal编程技术网

Java 使用SaxParser修改xml属性

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();

我有一个XML,其中我想使用SAXParser为特定节点修改link属性的

我确实找到了,并在我的案例中使用了Attributes2Impl

到目前为止,我所拥有的:

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);
            }
        }