kenai_tools 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +8 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/kenai_tools.iml +40 -0
- data/.idea/misc.xml +8 -0
- data/.idea/modules.xml +9 -0
- data/.idea/vcs.xml +7 -0
- data/Gemfile +4 -0
- data/README.md +28 -0
- data/Rakefile +2 -0
- data/bin/dlutil +139 -0
- data/kenai_tools.gemspec +43 -0
- data/lib/kenai_tools/downloads_client.rb +241 -0
- data/lib/kenai_tools/kenai_client.rb +168 -0
- data/lib/kenai_tools/version.rb +3 -0
- data/lib/kenai_tools.rb +7 -0
- data/spec/downloads_client_spec.rb +302 -0
- data/spec/fixtures/data/irs_docs/irs-form-1040.pdf +0 -0
- data/spec/fixtures/data/irs_docs/irs-p555.pdf +0 -0
- data/spec/fixtures/data/sax.tgz +0 -0
- data/spec/fixtures/data/sax2/.cvsignore +9 -0
- data/spec/fixtures/data/sax2/CHANGES +245 -0
- data/spec/fixtures/data/sax2/COPYING +12 -0
- data/spec/fixtures/data/sax2/ChangeLog +666 -0
- data/spec/fixtures/data/sax2/Makefile +77 -0
- data/spec/fixtures/data/sax2/README +62 -0
- data/spec/fixtures/data/sax2/build.xml +68 -0
- data/spec/fixtures/data/sax2/src/SAXDump.java +238 -0
- data/spec/fixtures/data/sax2/src/SAXTest.java +351 -0
- data/spec/fixtures/data/sax2/src/org/xml/sax/Attributes.java +257 -0
- data/spec/fixtures/data/sax2/src/org/xml/sax/package.html +297 -0
- data/spec/fixtures/data/sax2r2.jar +0 -0
- data/spec/fixtures/data/text1.txt +4 -0
- data/spec/spec_helper.rb +9 -0
- metadata +222 -0
@@ -0,0 +1,351 @@
|
|
1
|
+
// SAXTest.java - test application for SAX2
|
2
|
+
|
3
|
+
import java.io.IOException;
|
4
|
+
|
5
|
+
import java.net.MalformedURLException;
|
6
|
+
import java.net.URL;
|
7
|
+
|
8
|
+
import org.xml.sax.Attributes;
|
9
|
+
import org.xml.sax.ContentHandler;
|
10
|
+
import org.xml.sax.ErrorHandler;
|
11
|
+
import org.xml.sax.Locator;
|
12
|
+
import org.xml.sax.SAXException;
|
13
|
+
import org.xml.sax.SAXNotRecognizedException;
|
14
|
+
import org.xml.sax.SAXNotSupportedException;
|
15
|
+
import org.xml.sax.SAXParseException;
|
16
|
+
import org.xml.sax.XMLReader;
|
17
|
+
|
18
|
+
import org.xml.sax.helpers.XMLReaderFactory;
|
19
|
+
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Test class for SAX2.
|
23
|
+
*/
|
24
|
+
public class SAXTest implements ContentHandler, ErrorHandler
|
25
|
+
{
|
26
|
+
|
27
|
+
|
28
|
+
////////////////////////////////////////////////////////////////////
|
29
|
+
// Main app.
|
30
|
+
////////////////////////////////////////////////////////////////////
|
31
|
+
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Main application entry point.
|
35
|
+
*/
|
36
|
+
public static void main (String args[])
|
37
|
+
{
|
38
|
+
|
39
|
+
System.out.println("************************************" +
|
40
|
+
"************************************");
|
41
|
+
System.out.println("* Testing SAX2");
|
42
|
+
System.out.println("************************************" +
|
43
|
+
"************************************");
|
44
|
+
System.out.print("\n");
|
45
|
+
|
46
|
+
//
|
47
|
+
// Figure out the XML reader
|
48
|
+
//
|
49
|
+
|
50
|
+
String driverName =
|
51
|
+
System.getProperty("org.xml.sax.driver",
|
52
|
+
"org.apache.xerces.parsers.SAXParser");
|
53
|
+
System.out.println("SAX driver class: " +
|
54
|
+
driverName +
|
55
|
+
"\n (you can specify a different one using the " +
|
56
|
+
"org.xml.sax.driver property)");
|
57
|
+
System.out.print("\n");
|
58
|
+
|
59
|
+
|
60
|
+
//
|
61
|
+
// Create the XML reader
|
62
|
+
//
|
63
|
+
|
64
|
+
System.out.println("Now, we'll try to create an instance of the " +
|
65
|
+
"driver, using XMLReaderFactory");
|
66
|
+
XMLReader reader = null;
|
67
|
+
try {
|
68
|
+
reader = XMLReaderFactory.createXMLReader(driverName);
|
69
|
+
} catch (SAXException e) {
|
70
|
+
System.out.println("Failed to create XMLReader: " +
|
71
|
+
e.getMessage() +
|
72
|
+
"\nMake sure that the class actually " +
|
73
|
+
"exists and is present on your CLASSPATH" +
|
74
|
+
"\nor specify a different class using the " +
|
75
|
+
"org.xml.sax.driver property");
|
76
|
+
System.exit(1);
|
77
|
+
}
|
78
|
+
System.out.println("XMLReader created successfully\n");
|
79
|
+
|
80
|
+
|
81
|
+
//
|
82
|
+
// Check features.
|
83
|
+
//
|
84
|
+
System.out.println("Checking defaults for some well-known features:");
|
85
|
+
checkFeature(reader, "http://xml.org/sax/features/namespaces");
|
86
|
+
checkFeature(reader, "http://xml.org/sax/features/namespace-prefixes");
|
87
|
+
checkFeature(reader, "http://xml.org/sax/features/string-interning");
|
88
|
+
checkFeature(reader, "http://xml.org/sax/features/validation");
|
89
|
+
checkFeature(reader,
|
90
|
+
"http://xml.org/sax/features/external-general-entities");
|
91
|
+
checkFeature(reader,
|
92
|
+
"http://xml.org/sax/features/external-parameter-entities");
|
93
|
+
System.out.print("\n");
|
94
|
+
|
95
|
+
|
96
|
+
//
|
97
|
+
// Assign handlers.
|
98
|
+
//
|
99
|
+
System.out.println("Creating and assigning handlers\n");
|
100
|
+
SAXTest handler = new SAXTest();
|
101
|
+
reader.setContentHandler(handler);
|
102
|
+
reader.setErrorHandler(handler);
|
103
|
+
|
104
|
+
//
|
105
|
+
// Parse documents.
|
106
|
+
//
|
107
|
+
if (args.length > 0) {
|
108
|
+
for (int i = 0; i < args.length; i++) {
|
109
|
+
String systemId = makeAbsoluteURL(args[i]);
|
110
|
+
System.out.println("Trying file " + systemId);
|
111
|
+
try {
|
112
|
+
reader.parse(systemId);
|
113
|
+
} catch (SAXException e1) {
|
114
|
+
System.out.println(systemId +
|
115
|
+
" failed with XML error: " +
|
116
|
+
e1.getMessage());
|
117
|
+
} catch (IOException e2) {
|
118
|
+
System.out.println(systemId +
|
119
|
+
" failed with I/O error: " +
|
120
|
+
e2.getMessage());
|
121
|
+
}
|
122
|
+
System.out.print("\n");
|
123
|
+
}
|
124
|
+
} else {
|
125
|
+
System.out.println("No documents supplied on command line; " +
|
126
|
+
"parsing skipped.");
|
127
|
+
}
|
128
|
+
|
129
|
+
|
130
|
+
//
|
131
|
+
// Done.
|
132
|
+
//
|
133
|
+
System.out.println("SAX2 test finished.");
|
134
|
+
}
|
135
|
+
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Check and display the value of a feature.
|
139
|
+
*/
|
140
|
+
private static void checkFeature (XMLReader reader, String name)
|
141
|
+
{
|
142
|
+
try {
|
143
|
+
System.out.println(" " +
|
144
|
+
name +
|
145
|
+
" = " +
|
146
|
+
reader.getFeature(name));
|
147
|
+
} catch (SAXNotRecognizedException e) {
|
148
|
+
System.out.println("XMLReader does not recognize feature " +
|
149
|
+
name);
|
150
|
+
} catch (SAXNotSupportedException e) {
|
151
|
+
System.out.println("XMLReader recognizes feature " +
|
152
|
+
name +
|
153
|
+
" but does not support checking its value");
|
154
|
+
}
|
155
|
+
}
|
156
|
+
|
157
|
+
|
158
|
+
/**
|
159
|
+
* Construct an absolute URL if necessary.
|
160
|
+
*
|
161
|
+
* This method is useful for relative file paths on a command
|
162
|
+
* line; it converts them to absolute file: URLs, using the
|
163
|
+
* correct path separator. This method is based on an
|
164
|
+
* original suggestion by James Clark.
|
165
|
+
*
|
166
|
+
* @param url The (possibly relative) URL.
|
167
|
+
* @return An absolute URL of some sort.
|
168
|
+
*/
|
169
|
+
private static String makeAbsoluteURL (String url)
|
170
|
+
{
|
171
|
+
URL baseURL;
|
172
|
+
|
173
|
+
String currentDirectory = System.getProperty("user.dir");
|
174
|
+
String fileSep = System.getProperty("file.separator");
|
175
|
+
String file = currentDirectory.replace(fileSep.charAt(0), '/') + '/';
|
176
|
+
|
177
|
+
if (file.charAt(0) != '/') {
|
178
|
+
file = "/" + file;
|
179
|
+
}
|
180
|
+
|
181
|
+
try {
|
182
|
+
baseURL = new URL("file", null, file);
|
183
|
+
return new URL(baseURL, url).toString();
|
184
|
+
} catch (MalformedURLException e) {
|
185
|
+
System.err.println(url + ": " + e.getMessage());
|
186
|
+
return url;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
private static String makeNSName (String uri, String localName,
|
191
|
+
String qName)
|
192
|
+
{
|
193
|
+
if (uri.equals(""))
|
194
|
+
uri = "[none]";
|
195
|
+
if (localName.equals(""))
|
196
|
+
localName = "[none]";
|
197
|
+
if (qName.equals(""))
|
198
|
+
qName = "[none]";
|
199
|
+
return uri + '/' + localName + '/' + qName;
|
200
|
+
}
|
201
|
+
|
202
|
+
private static String escapeData (char ch[], int start, int length)
|
203
|
+
{
|
204
|
+
StringBuffer buf = new StringBuffer();
|
205
|
+
for (int i = start; i < start + length; i++) {
|
206
|
+
switch(ch[i]) {
|
207
|
+
case '\n':
|
208
|
+
buf.append("\\n");
|
209
|
+
break;
|
210
|
+
case '\t':
|
211
|
+
buf.append("\\t");
|
212
|
+
break;
|
213
|
+
case '\r':
|
214
|
+
buf.append("\\r");
|
215
|
+
break;
|
216
|
+
default:
|
217
|
+
buf.append(ch[i]);
|
218
|
+
break;
|
219
|
+
}
|
220
|
+
}
|
221
|
+
return buf.toString();
|
222
|
+
}
|
223
|
+
|
224
|
+
|
225
|
+
|
226
|
+
////////////////////////////////////////////////////////////////////
|
227
|
+
// Implementation of org.xml.sax.ContentHandler.
|
228
|
+
////////////////////////////////////////////////////////////////////
|
229
|
+
|
230
|
+
public void setDocumentLocator (Locator locator)
|
231
|
+
{
|
232
|
+
System.out.println(" EVENT: setDocumentLocator");
|
233
|
+
}
|
234
|
+
|
235
|
+
public void startDocument ()
|
236
|
+
throws SAXException
|
237
|
+
{
|
238
|
+
System.out.println(" EVENT: startDocument");
|
239
|
+
}
|
240
|
+
|
241
|
+
public void endDocument ()
|
242
|
+
throws SAXException
|
243
|
+
{
|
244
|
+
System.out.println(" EVENT: endDocument");
|
245
|
+
}
|
246
|
+
|
247
|
+
public void startPrefixMapping (String prefix, String uri)
|
248
|
+
throws SAXException
|
249
|
+
{
|
250
|
+
System.out.println(" EVENT: startPrefixMapping " +
|
251
|
+
prefix + " = " + uri);
|
252
|
+
}
|
253
|
+
|
254
|
+
public void endPrefixMapping (String prefix)
|
255
|
+
throws SAXException
|
256
|
+
{
|
257
|
+
System.out.println(" EVENT: endPrefixMapping " + prefix);
|
258
|
+
}
|
259
|
+
|
260
|
+
public void startElement (String namespaceURI, String localName,
|
261
|
+
String qName, Attributes atts)
|
262
|
+
throws SAXException
|
263
|
+
{
|
264
|
+
System.out.println(" EVENT: startElement " +
|
265
|
+
makeNSName(namespaceURI, localName, qName));
|
266
|
+
int attLen = atts.getLength();
|
267
|
+
for (int i = 0; i < attLen; i++) {
|
268
|
+
char ch[] = atts.getValue(i).toCharArray();
|
269
|
+
System.out.println(" Attribute " +
|
270
|
+
makeNSName(atts.getURI(i),
|
271
|
+
atts.getLocalName(i),
|
272
|
+
atts.getQName(i)) +
|
273
|
+
'=' +
|
274
|
+
escapeData(ch, 0, ch.length));
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
public void endElement (String namespaceURI, String localName,
|
279
|
+
String qName)
|
280
|
+
throws SAXException
|
281
|
+
{
|
282
|
+
System.out.println(" EVENT: endElement " +
|
283
|
+
makeNSName(namespaceURI, localName, qName));
|
284
|
+
}
|
285
|
+
|
286
|
+
public void characters (char ch[], int start, int length)
|
287
|
+
throws SAXException
|
288
|
+
{
|
289
|
+
System.out.println(" EVENT: characters " +
|
290
|
+
escapeData(ch, start, length));
|
291
|
+
}
|
292
|
+
|
293
|
+
public void ignorableWhitespace (char ch[], int start, int length)
|
294
|
+
throws SAXException
|
295
|
+
{
|
296
|
+
System.out.println(" EVENT: ignorableWhitespace " +
|
297
|
+
escapeData(ch, start, length));
|
298
|
+
}
|
299
|
+
|
300
|
+
public void processingInstruction (String target, String data)
|
301
|
+
throws SAXException
|
302
|
+
{
|
303
|
+
System.out.println(" EVENT: processingInstruction " +
|
304
|
+
target + ' ' + data);
|
305
|
+
}
|
306
|
+
|
307
|
+
public void skippedEntity (String name)
|
308
|
+
throws SAXException
|
309
|
+
{
|
310
|
+
System.out.println(" EVENT: skippedEntity " + name);
|
311
|
+
}
|
312
|
+
|
313
|
+
|
314
|
+
|
315
|
+
////////////////////////////////////////////////////////////////////
|
316
|
+
// Implementation of org.xml.sax.ErrorHandler.
|
317
|
+
////////////////////////////////////////////////////////////////////
|
318
|
+
|
319
|
+
public void warning (SAXParseException e)
|
320
|
+
throws SAXException
|
321
|
+
{
|
322
|
+
System.out.println(" EVENT: warning " +
|
323
|
+
e.getMessage() + ' ' +
|
324
|
+
e.getSystemId() + ' ' +
|
325
|
+
e.getLineNumber() + ' ' +
|
326
|
+
e.getColumnNumber());
|
327
|
+
}
|
328
|
+
|
329
|
+
public void error (SAXParseException e)
|
330
|
+
throws SAXException
|
331
|
+
{
|
332
|
+
System.out.println(" EVENT: error " +
|
333
|
+
e.getMessage() + ' ' +
|
334
|
+
e.getSystemId() + ' ' +
|
335
|
+
e.getLineNumber() + ' ' +
|
336
|
+
e.getColumnNumber());
|
337
|
+
}
|
338
|
+
|
339
|
+
public void fatalError (SAXParseException e)
|
340
|
+
throws SAXException
|
341
|
+
{
|
342
|
+
System.out.println(" EVENT: fatal error " +
|
343
|
+
e.getMessage() + ' ' +
|
344
|
+
e.getSystemId() + ' ' +
|
345
|
+
e.getLineNumber() + ' ' +
|
346
|
+
e.getColumnNumber());
|
347
|
+
}
|
348
|
+
|
349
|
+
}
|
350
|
+
|
351
|
+
// end of SAXTest.java
|
@@ -0,0 +1,257 @@
|
|
1
|
+
// Attributes.java - attribute list with Namespace support
|
2
|
+
// http://www.saxproject.org
|
3
|
+
// Written by David Megginson
|
4
|
+
// NO WARRANTY! This class is in the public domain.
|
5
|
+
// $Id: Attributes.java,v 1.13 2004/03/18 12:28:05 dmegginson Exp $
|
6
|
+
|
7
|
+
package org.xml.sax;
|
8
|
+
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Interface for a list of XML attributes.
|
12
|
+
*
|
13
|
+
* <blockquote>
|
14
|
+
* <em>This module, both source code and documentation, is in the
|
15
|
+
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
|
16
|
+
* See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
|
17
|
+
* for further information.
|
18
|
+
* </blockquote>
|
19
|
+
*
|
20
|
+
* <p>This interface allows access to a list of attributes in
|
21
|
+
* three different ways:</p>
|
22
|
+
*
|
23
|
+
* <ol>
|
24
|
+
* <li>by attribute index;</li>
|
25
|
+
* <li>by Namespace-qualified name; or</li>
|
26
|
+
* <li>by qualified (prefixed) name.</li>
|
27
|
+
* </ol>
|
28
|
+
*
|
29
|
+
* <p>The list will not contain attributes that were declared
|
30
|
+
* #IMPLIED but not specified in the start tag. It will also not
|
31
|
+
* contain attributes used as Namespace declarations (xmlns*) unless
|
32
|
+
* the <code>http://xml.org/sax/features/namespace-prefixes</code>
|
33
|
+
* feature is set to <var>true</var> (it is <var>false</var> by
|
34
|
+
* default).
|
35
|
+
* Because SAX2 conforms to the original "Namespaces in XML"
|
36
|
+
* recommendation, it normally does not
|
37
|
+
* give namespace declaration attributes a namespace URI.
|
38
|
+
* </p>
|
39
|
+
*
|
40
|
+
* <p>Some SAX2 parsers may support using an optional feature flag
|
41
|
+
* (<code>http://xml.org/sax/features/xmlns-uris</code>) to request
|
42
|
+
* that those attributes be given URIs, conforming to a later
|
43
|
+
* backwards-incompatible revision of that recommendation. (The
|
44
|
+
* attribute's "local name" will be the prefix, or "xmlns" when
|
45
|
+
* defining a default element namespace.) For portability, handler
|
46
|
+
* code should always resolve that conflict, rather than requiring
|
47
|
+
* parsers that can change the setting of that feature flag. </p>
|
48
|
+
*
|
49
|
+
* <p>If the namespace-prefixes feature (see above) is
|
50
|
+
* <var>false</var>, access by qualified name may not be available; if
|
51
|
+
* the <code>http://xml.org/sax/features/namespaces</code> feature is
|
52
|
+
* <var>false</var>, access by Namespace-qualified names may not be
|
53
|
+
* available.</p>
|
54
|
+
*
|
55
|
+
* <p>This interface replaces the now-deprecated SAX1 {@link
|
56
|
+
* org.xml.sax.AttributeList AttributeList} interface, which does not
|
57
|
+
* contain Namespace support. In addition to Namespace support, it
|
58
|
+
* adds the <var>getIndex</var> methods (below).</p>
|
59
|
+
*
|
60
|
+
* <p>The order of attributes in the list is unspecified, and will
|
61
|
+
* vary from implementation to implementation.</p>
|
62
|
+
*
|
63
|
+
* @since SAX 2.0
|
64
|
+
* @author David Megginson
|
65
|
+
* @version 2.0.1 (sax2r2)
|
66
|
+
* @see org.xml.sax.helpers.AttributesImpl
|
67
|
+
* @see org.xml.sax.ext.DeclHandler#attributeDecl
|
68
|
+
*/
|
69
|
+
public interface Attributes
|
70
|
+
{
|
71
|
+
|
72
|
+
|
73
|
+
////////////////////////////////////////////////////////////////////
|
74
|
+
// Indexed access.
|
75
|
+
////////////////////////////////////////////////////////////////////
|
76
|
+
|
77
|
+
|
78
|
+
/**
|
79
|
+
* Return the number of attributes in the list.
|
80
|
+
*
|
81
|
+
* <p>Once you know the number of attributes, you can iterate
|
82
|
+
* through the list.</p>
|
83
|
+
*
|
84
|
+
* @return The number of attributes in the list.
|
85
|
+
* @see #getURI(int)
|
86
|
+
* @see #getLocalName(int)
|
87
|
+
* @see #getQName(int)
|
88
|
+
* @see #getType(int)
|
89
|
+
* @see #getValue(int)
|
90
|
+
*/
|
91
|
+
public abstract int getLength ();
|
92
|
+
|
93
|
+
|
94
|
+
/**
|
95
|
+
* Look up an attribute's Namespace URI by index.
|
96
|
+
*
|
97
|
+
* @param index The attribute index (zero-based).
|
98
|
+
* @return The Namespace URI, or the empty string if none
|
99
|
+
* is available, or null if the index is out of
|
100
|
+
* range.
|
101
|
+
* @see #getLength
|
102
|
+
*/
|
103
|
+
public abstract String getURI (int index);
|
104
|
+
|
105
|
+
|
106
|
+
/**
|
107
|
+
* Look up an attribute's local name by index.
|
108
|
+
*
|
109
|
+
* @param index The attribute index (zero-based).
|
110
|
+
* @return The local name, or the empty string if Namespace
|
111
|
+
* processing is not being performed, or null
|
112
|
+
* if the index is out of range.
|
113
|
+
* @see #getLength
|
114
|
+
*/
|
115
|
+
public abstract String getLocalName (int index);
|
116
|
+
|
117
|
+
|
118
|
+
/**
|
119
|
+
* Look up an attribute's XML qualified (prefixed) name by index.
|
120
|
+
*
|
121
|
+
* @param index The attribute index (zero-based).
|
122
|
+
* @return The XML qualified name, or the empty string
|
123
|
+
* if none is available, or null if the index
|
124
|
+
* is out of range.
|
125
|
+
* @see #getLength
|
126
|
+
*/
|
127
|
+
public abstract String getQName (int index);
|
128
|
+
|
129
|
+
|
130
|
+
/**
|
131
|
+
* Look up an attribute's type by index.
|
132
|
+
*
|
133
|
+
* <p>The attribute type is one of the strings "CDATA", "ID",
|
134
|
+
* "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY", "ENTITIES",
|
135
|
+
* or "NOTATION" (always in upper case).</p>
|
136
|
+
*
|
137
|
+
* <p>If the parser has not read a declaration for the attribute,
|
138
|
+
* or if the parser does not report attribute types, then it must
|
139
|
+
* return the value "CDATA" as stated in the XML 1.0 Recommendation
|
140
|
+
* (clause 3.3.3, "Attribute-Value Normalization").</p>
|
141
|
+
*
|
142
|
+
* <p>For an enumerated attribute that is not a notation, the
|
143
|
+
* parser will report the type as "NMTOKEN".</p>
|
144
|
+
*
|
145
|
+
* @param index The attribute index (zero-based).
|
146
|
+
* @return The attribute's type as a string, or null if the
|
147
|
+
* index is out of range.
|
148
|
+
* @see #getLength
|
149
|
+
*/
|
150
|
+
public abstract String getType (int index);
|
151
|
+
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Look up an attribute's value by index.
|
155
|
+
*
|
156
|
+
* <p>If the attribute value is a list of tokens (IDREFS,
|
157
|
+
* ENTITIES, or NMTOKENS), the tokens will be concatenated
|
158
|
+
* into a single string with each token separated by a
|
159
|
+
* single space.</p>
|
160
|
+
*
|
161
|
+
* @param index The attribute index (zero-based).
|
162
|
+
* @return The attribute's value as a string, or null if the
|
163
|
+
* index is out of range.
|
164
|
+
* @see #getLength
|
165
|
+
*/
|
166
|
+
public abstract String getValue (int index);
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
////////////////////////////////////////////////////////////////////
|
171
|
+
// Name-based query.
|
172
|
+
////////////////////////////////////////////////////////////////////
|
173
|
+
|
174
|
+
|
175
|
+
/**
|
176
|
+
* Look up the index of an attribute by Namespace name.
|
177
|
+
*
|
178
|
+
* @param uri The Namespace URI, or the empty string if
|
179
|
+
* the name has no Namespace URI.
|
180
|
+
* @param localName The attribute's local name.
|
181
|
+
* @return The index of the attribute, or -1 if it does not
|
182
|
+
* appear in the list.
|
183
|
+
*/
|
184
|
+
public int getIndex (String uri, String localName);
|
185
|
+
|
186
|
+
|
187
|
+
/**
|
188
|
+
* Look up the index of an attribute by XML qualified (prefixed) name.
|
189
|
+
*
|
190
|
+
* @param qName The qualified (prefixed) name.
|
191
|
+
* @return The index of the attribute, or -1 if it does not
|
192
|
+
* appear in the list.
|
193
|
+
*/
|
194
|
+
public int getIndex (String qName);
|
195
|
+
|
196
|
+
|
197
|
+
/**
|
198
|
+
* Look up an attribute's type by Namespace name.
|
199
|
+
*
|
200
|
+
* <p>See {@link #getType(int) getType(int)} for a description
|
201
|
+
* of the possible types.</p>
|
202
|
+
*
|
203
|
+
* @param uri The Namespace URI, or the empty String if the
|
204
|
+
* name has no Namespace URI.
|
205
|
+
* @param localName The local name of the attribute.
|
206
|
+
* @return The attribute type as a string, or null if the
|
207
|
+
* attribute is not in the list or if Namespace
|
208
|
+
* processing is not being performed.
|
209
|
+
*/
|
210
|
+
public abstract String getType (String uri, String localName);
|
211
|
+
|
212
|
+
|
213
|
+
/**
|
214
|
+
* Look up an attribute's type by XML qualified (prefixed) name.
|
215
|
+
*
|
216
|
+
* <p>See {@link #getType(int) getType(int)} for a description
|
217
|
+
* of the possible types.</p>
|
218
|
+
*
|
219
|
+
* @param qName The XML qualified name.
|
220
|
+
* @return The attribute type as a string, or null if the
|
221
|
+
* attribute is not in the list or if qualified names
|
222
|
+
* are not available.
|
223
|
+
*/
|
224
|
+
public abstract String getType (String qName);
|
225
|
+
|
226
|
+
|
227
|
+
/**
|
228
|
+
* Look up an attribute's value by Namespace name.
|
229
|
+
*
|
230
|
+
* <p>See {@link #getValue(int) getValue(int)} for a description
|
231
|
+
* of the possible values.</p>
|
232
|
+
*
|
233
|
+
* @param uri The Namespace URI, or the empty String if the
|
234
|
+
* name has no Namespace URI.
|
235
|
+
* @param localName The local name of the attribute.
|
236
|
+
* @return The attribute value as a string, or null if the
|
237
|
+
* attribute is not in the list.
|
238
|
+
*/
|
239
|
+
public abstract String getValue (String uri, String localName);
|
240
|
+
|
241
|
+
|
242
|
+
/**
|
243
|
+
* Look up an attribute's value by XML qualified (prefixed) name.
|
244
|
+
*
|
245
|
+
* <p>See {@link #getValue(int) getValue(int)} for a description
|
246
|
+
* of the possible values.</p>
|
247
|
+
*
|
248
|
+
* @param qName The XML qualified name.
|
249
|
+
* @return The attribute value as a string, or null if the
|
250
|
+
* attribute is not in the list or if qualified names
|
251
|
+
* are not available.
|
252
|
+
*/
|
253
|
+
public abstract String getValue (String qName);
|
254
|
+
|
255
|
+
}
|
256
|
+
|
257
|
+
// end of Attributes.java
|