需要使用SAX解析器提取xsi:type属性值

时间:2013-05-07 05:18:49

标签: java xml sax

我想从XML中提取xsi:type属性值,如下所示

<interface xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="SerialInterface">

我想在这里提取xsi:type属性值,即 SerialInterface

我试图使用node.getAttributeValue,但这并不完全正常

1 个答案:

答案 0 :(得分:0)

我会使用StAX。

    XMLStreamReader xr = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(s));
    xr.next();
    String type = xr.getAttributeValue(0);

请注意,我使用了属性索引0.这是因为XML解析器不返回xmlns:xsi attr。

这是基于SAX的版本

    String s = "<interface xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"SerialInterface\" />";
    final StringBuilder type = new StringBuilder();
    SAXParserFactory.newInstance().newSAXParser()
            .parse(new ByteArrayInputStream(s.getBytes()), new DefaultHandler() {
                @Override
                public void startElement(String uri, String localName, String qName,
                        Attributes attrs) throws SAXException {
                    if (type.length() == 0) {
                        type.append(attrs.getValue("xsi:type"));
                    }
                }
            });
    System.out.println(type);

输出

SerialInterface