CSCI 5733.1
XML Application Development
Summer 2004
Suggested Solution to Mid-Term Examination(1) For example,
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
public class XmlToText extends DefaultHandler
{
public static void main(String argv[])
{
if (argv.length != 1) {
System.err.println("Usage: java XmlToText filename");
System.exit(1);
}
// Use an instance of ourselves as the SAX event handler
DefaultHandler handler = new XmlToText();
// Use the default (non-validating) parser
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(new File(argv [0]), handler);
// print output
System.out.println(text);
} catch (Throwable t) {
t.printStackTrace();
}
}
// Data members
static private StringBuffer text = new StringBuffer();
// Handler method
public void characters(char[] ch,
int start,
int length)
throws SAXException
{ text.append(new String(ch, start, length));
} // characters
public void ignorableWhitespace(char[] ch,
int start,
int length)
throws SAXException
{ text.append(new String(ch, start, length));
} // characters
public String getText() {
return text.toString();
}
} // XmlToText.(2) (a) For example,
use LWP::Simple;
use strict;
my $url = "http://dcm.uhcl.edu/yue/authors.xml";
my $urlContents = get($url);
my $csv = "";
while ($urlContents =~ /<author.*?>.*?<name.*?>(.*?)<\/name.*?>(.*?)<\/author.*?>/gs) {
$csv .= "\n" if $csv;
my ($name, $books) = ($1, $2);
$csv .= csvEncode(xmlDecode($name));
while ($books =~ /<book.*?>(.*?)<\/book.*?>/gs) {
$csv .= "," . csvEncode(xmlDecode($1));
}
}
print "Content-type: text/plain\n\n";
print $csv;
exit 0;
sub csvEncode {
my $result = shift;
$result =~ s/"/""/gs;
"\"$result\"";
}
sub xmlDecode {
my $result = shift;
$result =~ s/</</gsi;
$result =~ s/>/>/gsi;
$result =~ s/"/"/gsi;
$result =~ s/'/'/gsi;
$result =~ s/&/&/gsi;
$result;
} # xmldecode
(3)
(a) False
(b) False
(c) False
(d) False
(e) True(4)
(a) No error.
(b) For example,
<xsd:simpleType name="OddNumber">
<xsd:restriction base="xsd:string">
<xsd:pattern value="-?(1|3|5|7|9|([1-9][0-9]*[13579]))"/>
</xsd:restriction>
< /xsd:simpleType>(c) For example,
System.out.print(a.getFirstChild().getFirstChild().getNodeValue());