如何获取“xmlns:XXX”属性是否在 SAX 中设置 setNamespaceAware(true)?

发布于 2024-10-26 05:45:32 字数 1142 浏览 1 评论 0原文

这是我的代码:

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

设置setNamespaceAware=true后,我无法在方法的参数attributes中获取xmlns:XXX属性public void startElement(String uri, String localName, String qName, Attributes 属性)

对于以下节点:

<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/">

我只获取 nametargetNamespace 属性。 xmlnsxmlns:wsdlxmlns:mimexmlns:httpxmlns:tns code> 在 attributes 参数中。但它们是不可访问的。

有没有办法使用 setNamespaceAware=true 并获取节点的所有属性?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你げ笑在眉眼 2024-11-02 05:45:32

当您的 XML 解析器支持 XML 命名空间时,您就不需要访问这些属性,因为它们只定义 XML 中使用的命名空间的短名称。

在这种情况下,您始终使用名称空间的全名(例如 http://schemas.xmlsoap.org/wsdl/)来引用名称空间,并且可以忽略它们在 XML 中的别名(例如wsdl)。

SAX 不提供这些值的事实记录在 属性

它将 [...] 不包含用作命名空间声明 (xmlns*) 的属性,除非 http://xml.org/sax/features/namespace-prefixes 功能设置为 true(默认为 false)。


因此使用 < code>saxfac.setFeature("http://xml.org/sax/features/namespace-prefixes", true) 应该可以帮助您获取这些值。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文