5

これが私のコードです:

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取得できません。xmlns:XXXattributespublic void startElement(String uri, String localName, String qName, Attributes 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/">

私はただ取得nameしてtargetNamespace属性を付けます。xmlnsxmlns:wsdlxmlns:mimexmlns:httpおよびxmlns:tnsattributesパラメーターに含まれています。しかし、それらはアクセスできません。

setNamespaceAware=trueノードのすべての属性を使用して取得する方法はありますか?

4

2 に答える 2

8

XML パーサーが XML 名前空間に対応している場合、それらのプロパティは XML で使用される名前空間の短い名前のみを定義するため、これらのプロパティにアクセスする必要はありません。

その場合、名前空間は常にフル ネーム (例: http://schemas.xmlsoap.org/wsdl/) を使用して参照し、XML でエイリアスされている短縮名 (例: ) は無視できますwsdl

SAX がこれらの値を提供しないという事実は、Attributesクラスで文書化されています。

[...]機能がに設定されてxmlns*いない限り、名前空間宣言 ( )として使用される属性は含まれません(デフォルトです)。http://xml.org/sax/features/namespace-prefixestruefalse

したがって、を使用saxfac.setFeature("http://xml.org/sax/features/namespace-prefixes", true)すると、これらの値に到達するのに役立ちます。

于 2011-03-24T09:04:10.127 に答える
1

名前空間宣言を取得する標準的な方法は、startPrefixMapping イベントからです。

于 2011-03-24T13:31:21.467 に答える