如何在 Java 中使用 SAX Parser 检查 xml 标签是不是具有属性?

Posted

技术标签:

【中文标题】如何在 Java 中使用 SAX Parser 检查 xml 标签是不是具有属性?【英文标题】:How to check if xml tag has attributes using SAX Parser in Java?如何在 Java 中使用 SAX Parser 检查 xml 标签是否具有属性? 【发布时间】:2014-07-19 21:23:37 【问题描述】:

我想问你一个关于 xml 文件的问题。我想通过在 Java 中使用 SAX Parser 来检查 xml 标签是否具有属性。

有答案吗?请帮帮我...

【问题讨论】:

您在 sax 处理程序的 startElement 方法中将属性作为参数获取 我真的不知道它是怎么回事。我使用这个语句来检查:if(attributes.getLength())....;。顺便问一下,我是否只能获取具有属性的标签名称。有可能吗? 到目前为止您尝试了哪些方法,问题究竟出在哪里?您可以编辑问题以显示当前代码的相关位吗? @sakura 不,在 sax 解析器中不可能只有带有属性的标签名称。您将在处理程序的 startElement 中获得所有标签。您需要自己放置过滤器逻辑以忽略“属性”为空的标签。如果您有一个小的工作代码,请发布它。我会尽力帮助 【参考方案1】:

SaxParser 处理程序的startElement 方法有一个参数,用于保存与其关联的属性列表。你可以依靠它。例如,这个程序打印出所有带有属性的标签以及与之关联的属性名称。

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class FindTagWithAttributes 

    public static void main(String argv[]) 

        try 

            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();

            DefaultHandler handler = new DefaultHandler() 

                public void startElement(String uri, String localName,
                        String qName, Attributes attributes)
                        throws SAXException 
                    if(attributes != null && attributes.getLength() > 0)
                        System.out.print(qName + " tag has attributes - ");
                        for(int i=0; i<attributes.getLength(); i++)
                            System.out.println(attributes.getLocalName(i));
                        
                    
                

                public void endElement(String uri, String localName,
                        String qName) throws SAXException 

                

                public void characters(char ch[], int start, int length)
                        throws SAXException 

                

            ;

            saxParser.parse("data.xml", handler);

         catch (Exception e) 
            e.printStackTrace();
        

    


【讨论】:

以上是关于如何在 Java 中使用 SAX Parser 检查 xml 标签是不是具有属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中使用 SAX Parser 为解析的 xml 文件设置 UTF-8

使用 SAX Parser 进行 Android XML 解析

XML Pull Parser 和 SAX Parser 有啥区别

使用 SAX Parser,获取属性的值

如何使用 SAX 解析器解析名称空间?

如何使用java从excel表提取内容