You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ja...@apache.org on 2003/11/10 18:43:58 UTC
svn commit: rev 100 - xml/xerces-p/trunk/samples
Author: jasons
Date: Mon Nov 10 09:43:58 2003
New Revision: 100
Added:
xml/xerces-p/trunk/samples/DOM2hash.pl
xml/xerces-p/trunk/samples/EnumVal.pl
xml/xerces-p/trunk/samples/SEnumVal.pl
Log:
new
Added: xml/xerces-p/trunk/samples/DOM2hash.pl
==============================================================================
--- (empty file)
+++ xml/xerces-p/trunk/samples/DOM2hash.pl Mon Nov 10 09:43:58 2003
@@ -0,0 +1,126 @@
+######################################################################
+#
+# The Apache Software License, Version 1.1
+#
+# Copyright (c) 1999-2000 The Apache Software Foundation. All rights
+# reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# 3. The end-user documentation included with the redistribution,
+# if any, must include the following acknowledgment:
+# "This product includes software developed by the
+# Apache Software Foundation (http://www.apache.org/)."
+# Alternately, this acknowledgment may appear in the software itself,
+# if and wherever such third-party acknowledgments normally appear.
+#
+# 4. The names "Xerces" and "Apache Software Foundation" must
+# not be used to endorse or promote products derived from this
+# software without prior written permission. For written
+# permission, please contact apache\@apache.org.
+#
+# 5. Products derived from this software may not be called "Apache",
+# nor may "Apache" appear in their name, without prior written
+# permission of the Apache Software Foundation.
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+# ====================================================================
+#
+# This software consists of voluntary contributions made by many
+# individuals on behalf of the Apache Software Foundation, and was
+# originally based on software copyright (c) 1999, International
+# Business Machines, Inc., http://www.ibm.com . For more information
+# on the Apache Software Foundation, please see
+# <http://www.apache.org/>.
+#
+######################################################################
+
+use XML::Xerces qw(error);
+use Getopt::Long;
+use Data::Dumper;
+use strict;
+my %OPTIONS;
+my $rc = GetOptions(\%OPTIONS,
+ 'help'
+ );
+
+my $USAGE = <<"EOU";
+usage: $0 xml_file
+EOU
+
+die "Bad option: $rc\n$USAGE" unless $rc;
+die $USAGE if exists $OPTIONS{help};
+
+die "Must specify input files\n$USAGE" unless scalar @ARGV;
+
+package MyNodeFilter;
+use strict;
+use vars qw(@ISA);
+@ISA = qw(XML::Xerces::PerlNodeFilter);
+sub acceptNode {
+ my ($self,$node) = @_;
+ return $XML::Xerces::DOMNodeFilter::FILTER_ACCEPT;
+}
+
+package main;
+
+my $DOM = XML::Xerces::XercesDOMParser->new();
+my $ERROR_HANDLER = XML::Xerces::PerlErrorHandler->new();
+$DOM->setErrorHandler($ERROR_HANDLER);
+eval{$DOM->parse($ARGV[0])};
+error($@,"Couldn't parse file: $ARGV[0]")
+ if $@;
+
+my $doc = $DOM->getDocument();
+my $root = $doc->getDocumentElement();
+
+my $hash = node2hash($root);
+print STDOUT Data::Dumper->Dump([$hash]);
+exit(0);
+
+sub node2hash {
+ my $node = shift;
+ my $return = {};
+
+ # build a hasref that represents this element
+ $return->{node_name} = $node->getNodeName();
+ if ($node->hasAttributes()) {
+ my %attrs = $node->getAttributes();
+ $return->{attributes} = \%attrs;
+ }
+
+ # insert code to handle children
+ if ($node->hasChildNodes()) {
+ my $text;
+ foreach my $child ($node->getChildNodes) {
+ push(@{$return->{children}},node2hash($child))
+ if $child->isa('XML::Xerces::DOMElement');
+ $text .= $child->getNodeValue()
+ if $child->isa('XML::Xerces::DOMText');
+ }
+ $return->{text} = $text
+ if $text !~ /^\s*$/;
+ }
+ return $return;
+}
Added: xml/xerces-p/trunk/samples/EnumVal.pl
==============================================================================
--- (empty file)
+++ xml/xerces-p/trunk/samples/EnumVal.pl Mon Nov 10 09:43:58 2003
@@ -0,0 +1,155 @@
+######################################################################
+#
+# The Apache Software License, Version 1.1
+#
+# Copyright (c) 1999-2000 The Apache Software Foundation. All rights
+# reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# 3. The end-user documentation included with the redistribution,
+# if any, must include the following acknowledgment:
+# "This product includes software developed by the
+# Apache Software Foundation (http://www.apache.org/)."
+# Alternately, this acknowledgment may appear in the software itself,
+# if and wherever such third-party acknowledgments normally appear.
+#
+# 4. The names "Xerces" and "Apache Software Foundation" must
+# not be used to endorse or promote products derived from this
+# software without prior written permission. For written
+# permission, please contact apache\@apache.org.
+#
+# 5. Products derived from this software may not be called "Apache",
+# nor may "Apache" appear in their name, without prior written
+# permission of the Apache Software Foundation.
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+# ====================================================================
+#
+# This software consists of voluntary contributions made by many
+# individuals on behalf of the Apache Software Foundation, and was
+# originally based on software copyright (c) 1999, International
+# Business Machines, Inc., http://www.ibm.com . For more information
+# on the Apache Software Foundation, please see
+# <http://www.apache.org/>.
+#
+######################################################################
+#
+# EnumVal
+#
+# This sample is modeled after its XML4C counterpart. You give it an
+# XML file and it parses it and enumerates the DTD Grammar. It shows
+# how to access the DTD information stored in the internal data structurs
+#
+######################################################################
+
+use strict;
+use XML::Xerces qw(error);
+use Getopt::Long;
+use Benchmark;
+use vars qw(%OPTIONS);
+
+#
+# Read and validate command line args
+#
+
+my $USAGE = <<EOU;
+USAGE: $0 file
+EOU
+my $VERSION = q[$Id: DOMCount.pl,v 1.13 2002/08/27 19:33:19 jasons Exp $ ];
+
+my $rc = GetOptions(\%OPTIONS,
+ 'help');
+
+die $USAGE if exists $OPTIONS{help};
+die $USAGE unless scalar @ARGV;
+
+my $file = $ARGV[0];
+-f $file or die "File '$file' does not exist!\n";
+
+my $val_to_use = XML::Xerces::DTDValidator->new();
+my $parser = XML::Xerces::SAXParser->new($val_to_use);
+$parser->setValidationScheme ($XML::Xerces::AbstractDOMParser::Val_Auto);
+$parser->setErrorHandler(XML::Xerces::PerlErrorHandler->new());
+
+my $t0 = new Benchmark;
+eval {$parser->parse ($file)};
+error($@) if $@;
+
+my $count = $parser->getErrorCount();
+if ($count == 0) {
+ my $grammar = $val_to_use->getGrammar();
+ my $iterator = $grammar->getElemEnumerator();
+ if ($iterator->hasMoreElements()) {
+ while ($iterator->hasMoreElements()) {
+ my $elem = $iterator->nextElement();
+ printf STDOUT "Element Name: %s, Content Model: %s\n",
+ $elem->getFullName(),
+ $elem->getFormattedContentModel();
+ if ($elem->hasAttDefs()) {
+ my $attr_list = $elem->getAttDefList();
+ while ($attr_list->hasMoreElements()) {
+ my $attr = $attr_list->nextElement();
+ my $type = $attr->getType();
+ my $type_name;
+ if ($type == $XML::Xerces::XMLAttDef::CData) {
+ $type_name = 'CDATA';
+ } elsif ($type == $XML::Xerces::XMLAttDef::ID) {
+ $type_name = 'ID';
+ } elsif ($type == $XML::Xerces::XMLAttDef::Notation) {
+ $type_name = 'NOTATION';
+ } elsif ($type == $XML::Xerces::XMLAttDef::Enumeration) {
+ $type_name = 'ENUMERATION';
+ } elsif ($type == $XML::Xerces::XMLAttDef::Nmtoken
+ or $type == $XML::Xerces::XMLAttDef::Nmtokens
+ ) {
+ $type_name = 'NMTOKEN(S)';
+ } elsif ($type == $XML::Xerces::XMLAttDef::IDRef
+ or $type == $XML::Xerces::XMLAttDef::IDRefs
+ ) {
+ $type_name = 'IDREF(S)';
+ } elsif ($type == $XML::Xerces::XMLAttDef::Entity
+ or $type == $XML::Xerces::XMLAttDef::Entities
+ ) {
+ $type_name = 'ENTITY(IES)';
+ } elsif ($type == $XML::Xerces::XMLAttDef::NmToken
+ or $type == $XML::Xerces::XMLAttDef::NmTokens
+ ) {
+ $type_name = 'NMTOKEN(S)';
+ }
+ printf STDOUT "\tattribute Name: %s, Type: %s\n",
+ $attr->getFullName(),
+ $type_name;
+ }
+ }
+ }
+ }
+} else {
+ print STDERR "Errors occurred, no output available\n";
+}
+my $t1 = new Benchmark;
+my $td = timediff($t1, $t0);
+
+print STDOUT "$file: duration: ", timestr($td), "\n";
+exit(0);
Added: xml/xerces-p/trunk/samples/SEnumVal.pl
==============================================================================
--- (empty file)
+++ xml/xerces-p/trunk/samples/SEnumVal.pl Mon Nov 10 09:43:58 2003
@@ -0,0 +1,161 @@
+######################################################################
+#
+# The Apache Software License, Version 1.1
+#
+# Copyright (c) 1999-2000 The Apache Software Foundation. All rights
+# reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# 3. The end-user documentation included with the redistribution,
+# if any, must include the following acknowledgment:
+# "This product includes software developed by the
+# Apache Software Foundation (http://www.apache.org/)."
+# Alternately, this acknowledgment may appear in the software itself,
+# if and wherever such third-party acknowledgments normally appear.
+#
+# 4. The names "Xerces" and "Apache Software Foundation" must
+# not be used to endorse or promote products derived from this
+# software without prior written permission. For written
+# permission, please contact apache\@apache.org.
+#
+# 5. Products derived from this software may not be called "Apache",
+# nor may "Apache" appear in their name, without prior written
+# permission of the Apache Software Foundation.
+#
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+# ====================================================================
+#
+# This software consists of voluntary contributions made by many
+# individuals on behalf of the Apache Software Foundation, and was
+# originally based on software copyright (c) 1999, International
+# Business Machines, Inc., http://www.ibm.com . For more information
+# on the Apache Software Foundation, please see
+# <http://www.apache.org/>.
+#
+######################################################################
+#
+# EnumVal
+#
+# This sample is modeled after its XML4C counterpart. You give it an
+# XML file and it parses it and enumerates the DTD Grammar. It shows
+# how to access the DTD information stored in the internal data structurs
+#
+######################################################################
+
+use strict;
+use XML::Xerces qw(error);
+use Getopt::Long;
+use Benchmark;
+use vars qw(%OPTIONS);
+
+#
+# Read and validate command line args
+#
+
+my $USAGE = <<EOU;
+USAGE: $0 file
+EOU
+my $VERSION = q[$Id: DOMCount.pl,v 1.13 2002/08/27 19:33:19 jasons Exp $ ];
+
+my $rc = GetOptions(\%OPTIONS,
+ 'help');
+
+die $USAGE if exists $OPTIONS{help};
+die $USAGE unless scalar @ARGV;
+
+my $file = $ARGV[0];
+-f $file or die "File '$file' does not exist!\n";
+
+my $val_to_use = XML::Xerces::SchemaValidator->new();
+my $parser = XML::Xerces::SAXParser->new($val_to_use);
+$parser->setValidationScheme ($XML::Xerces::AbstractDOMParser::Val_Auto);
+$parser->setErrorHandler(XML::Xerces::PerlErrorHandler->new());
+$parser->setDoNamespaces(1);
+$parser->setDoSchema(1);
+
+my $t0 = new Benchmark;
+eval {$parser->parse ($file)};
+error($@) if $@;
+
+my $count = $parser->getErrorCount();
+if ($count == 0) {
+ my $grammar = $val_to_use->getGrammar();
+ printf STDOUT "Found Grammar: %s\n", $grammar;
+ my $iterator = $grammar->getElemEnumerator();
+ if ($iterator->hasMoreElements()) {
+ printf STDOUT "Found Elements\n";
+ while ($iterator->hasMoreElements()) {
+ my $elem = $iterator->nextElement();
+ printf STDOUT "Element Name: %s, Content Model: %s\n",
+ $elem->getFullName(),
+ $elem->getFormattedContentModel();
+ if ($elem->hasAttDefs()) {
+ my $attr_list = $elem->getAttDefList();
+ while ($attr_list->hasMoreElements()) {
+ my $attr = $attr_list->nextElement();
+ my $type = $attr->getType();
+ my $type_name;
+ if ($type == $XML::Xerces::XMLAttDef::CData) {
+ $type_name = 'CDATA';
+ } elsif ($type == $XML::Xerces::XMLAttDef::ID) {
+ $type_name = 'ID';
+ } elsif ($type == $XML::Xerces::XMLAttDef::Notation) {
+ $type_name = 'NOTATION';
+ } elsif ($type == $XML::Xerces::XMLAttDef::Enumeration) {
+ $type_name = 'ENUMERATION';
+ } elsif ($type == $XML::Xerces::XMLAttDef::Nmtoken
+ or $type == $XML::Xerces::XMLAttDef::Nmtokens
+ ) {
+ $type_name = 'NMTOKEN(S)';
+ } elsif ($type == $XML::Xerces::XMLAttDef::IDRef
+ or $type == $XML::Xerces::XMLAttDef::IDRefs
+ ) {
+ $type_name = 'IDREF(S)';
+ } elsif ($type == $XML::Xerces::XMLAttDef::Entity
+ or $type == $XML::Xerces::XMLAttDef::Entities
+ ) {
+ $type_name = 'ENTITY(IES)';
+ } elsif ($type == $XML::Xerces::XMLAttDef::NmToken
+ or $type == $XML::Xerces::XMLAttDef::NmTokens
+ ) {
+ $type_name = 'NMTOKEN(S)';
+ }
+ printf STDOUT "\tattribute Name: %s, Type: %s\n",
+ $attr->getFullName(),
+ $type_name;
+ }
+ }
+ }
+ }
+} else {
+ print STDERR "Errors occurred, no output available\n";
+}
+my $t1 = new Benchmark;
+my $td = timediff($t1, $t0);
+
+print STDOUT "$file: duration: ", timestr($td), "\n";
+
+
+__END__
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org