How to get “xmlns:XXX” attribute if set setNamespaceAware(true) in SAX?

爱⌒轻易说出口 提交于 2019-12-21 16:54:49

问题


Here is my code:

path = wsdlPath;
SAXParserFactory saxfac = SAXParserFactory.newInstance();
saxfac.setNamespaceAware(true);
saxfac.setXIncludeAware(true);
saxfac.setValidating(false);
SAXParser saxParser = saxfac.newSAXParser();
saxParser.parse(wsdlPath, this);

After Setting setNamespaceAware=true, I can't get the xmlns:XXX attributes in parameter attributes of method public void startElement(String uri, String localName, String qName, Attributes attributes).

for the following node:

<definitions name="Service1"
    targetNamespace="http://www.test.com/service"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
    xmlns:tns="http://www.test.com/">

I just get name and targetNamespace attribute. xmlns, xmlns:wsdl, xmlns:mime, xmlns:http and xmlns:tns are in the attributes parameter. But they are not accessible.

Is there any way to use setNamespaceAware=true and get all attributes of a node?


回答1:


When your XML parser is XML Namespace aware, then you should not need access to those properties, as they only define the short names for namespaces used in your XML.

In that case you always refer to the name spaces using their full name (e.g. http://schemas.xmlsoap.org/wsdl/) and can ignore what short name they are aliased to in the XML (e.g. wsdl).

The fact that SAX doesn't provide those values is documented on the Attributes class:

It will [...] not contain attributes used as Namespace declarations (xmlns*) unless the http://xml.org/sax/features/namespace-prefixes feature is set to true (it is false by default).

So using saxfac.setFeature("http://xml.org/sax/features/namespace-prefixes", true) should help you get to those values.




回答2:


The standard way to get the namespace declarations is from the startPrefixMapping event:

  • http://download.oracle.com/javase/6/docs/api/org/xml/sax/helpers/DefaultHandler.html#startPrefixMapping(java.lang.String,%20java.lang.String)


来源:https://stackoverflow.com/questions/5416637/how-to-get-xmlnsxxx-attribute-if-set-setnamespaceawaretrue-in-sax

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!