Applied XML Programming For Microsoft NET 1st Edition Dino Esposito Instant Download
Applied XML Programming For Microsoft NET 1st Edition Dino Esposito Instant Download
https://ebookultra.com/download/applied-xml-programming-for-
microsoft-net-1st-edition-dino-esposito/
https://ebookultra.com/download/introducing-microsoft-asp-net-
ajax-1st-edition-dino-esposito/
https://ebookultra.com/download/programming-microsoft-visual-basic-
net-version-2003-francesco-balena/
https://ebookultra.com/download/programming-microsoft-sql-
server-2000-with-microsoft-visual-basic-net-1st-edition-edition-rick-
dobson/
https://ebookultra.com/download/microsoft-access-2013-programming-by-
example-with-vba-xml-and-asp-1st-edition-julitta-korol/
Parallel Programming with Microsoft NET Design Patterns
for Decomposition and Coordination on Multicore
Architectures Patterns Practices 1st Edition Colin
Campbell
https://ebookultra.com/download/parallel-programming-with-microsoft-
net-design-patterns-for-decomposition-and-coordination-on-multicore-
architectures-patterns-practices-1st-edition-colin-campbell/
https://ebookultra.com/download/professional-asp-net-2-0-xml-thiru-
thangarathinam/
https://ebookultra.com/download/microsoft-net-remoting-1st-edition-
kim-williams/
https://ebookultra.com/download/applied-net-attributes-1st-edition-
tom-barnaby/
https://ebookultra.com/download/programming-asp-net-ajax-1st-edition-
christian-wenz/
Applied XML programming for Microsoft NET 1st
Edition Dino Esposito Digital Instant Download
Author(s): Dino Esposito
ISBN(s): 9780735618015, 0735618011
Edition: 1
File Details: PDF, 6.91 MB
Year: 2003
Language: english
Applied XML Programming for Microsoft .NET
Dino Esposito
Microsoft Press
A Division of Microsoft Corporation One Microsoft Way Redmond, Washington 98052-6399
All rights reserved. No part of the contents of this book may be reproduced or
transmitted in any form or by any means without the written permission of the publisher.
005.7'2--dc21 2002029546
1 2 3 4 5 6 7 8 9 QWT 7 6 5 4 3 2
A CIP catalogue record for this book is available from the British Library.
Microsoft Press books are available through booksellers and distributors worldwide. For
further information about international editions, contact your local Microsoft Corporation
office or contact Microsoft Press International directly at fax (425) 936-7329. Visit our
Web site at www.microsoft.com/mspress. Send comments to:
<[email protected]>.
ActiveX, IntelliSense, JScript, Microsoft, Microsoft Press, MS-DOS, Visual Basic, Visual
Studio, Win32, Windows and Windows NT are either registered trademarks or
trademarks of Microsoft Corporation in the United States and/or other countries. Other
product and company names mentioned herein may be the trademarks of their
respective owners.
Dino Esposito is Wintellect's ADO.NET and XML expert and a trainer and consultant
who specializes in .NET and Web applications. A frequent speaker at popular industry
events such as Microsoft TechEd, VSLive!, DevConnections, and WinSummit, Dino is
also a prolific author writing the monthly "Cutting Edge" column for MSDN Magazine
and the "Diving into Data Access" column for MSDN Voices. He also regularly
contributes to a number of other magazines, including Visual Studio Magazine, CoDe
Magazine, and asp.netPRO Magazine (http://www.aspnetpro.com). During a few rare
moments of spare time, Dino cofounded http://www.vb2themax.com, a Web site for
Visual Basic and Visual Basic .NET developers.
Fond of sea and beaches, Dino lives in Italy, precisely in the Rome area, with his wife,
Silvia, and two children—Francesco and Michela.
To Silvia, Francesco, and Michela
Acknowledgments
I can say it now: Several times I was about to start an XML book project, but then for
one reason or another the project never took off. So I'd like to start by saying thanks to
the people who believed in a fairly confused book idea and worked to make it happen.
These people are Anne Hamilton and Jeannine Gailey. (By the way, all the best,
Jeannine!)
Lynn Finnel brought the usual fundamental contribution as project editor. As Lynn
originally described her role in the first e-mail we exchanged, being an editor is a
delicate art, as you have to reconcile the needs of many people while meeting your own
deadlines. Thanks again, Lynn.
And a warm thanks goes to Jennifer Harris, who edited the book, and technical
reviewers Marc Young, Jim Fuchs, Julie Xiao, and Jean Ross.
Other people were involved with this book, mostly as personal reviewers. Francesco
Balena tested some of the code and provided a lot of insight. In particular, Giuseppe
Dimauro and Giuseppe Guerrasio helped to figure out the intricacies of the
XmlSerializer class, and Ralph Westphal did the same with custom readers. Kenn
Scribner has been the ideal extension to the MSDN documentation about Web
services. Rainer Heller of Siemens offered a really interesting perspective on Web
services interoperability. It was nice to discuss Web services in the more general
context of a conversation based on the World Football Championships—an indirect
demonstration that Web services are still interoperable today!
Thanks to all the Wintellect guys, and Jason Clark and Jeffrey Richter, in particular, for
their friendly and effective support.
And now my family. I've noticed that many authors, when writing acknowledgments,
promise their families that they will never repeat the experience. Although rewarding for
themselves, they explain, writing a book is too hard on the rest of the family to be
repeated. I'll be honest and sincere here. So, Silvia, and Francesco and Michela, set
your mind at rest. I will do all I can to write even more books. But I love you all beyond
imagination.
A lot of things have happened in the meantime, and XML did go a long way. You can
be sure that, as I write this, a thousand or more IT managers are giving presentations
that include XML in one way or another. Not many years ago, at a software conference,
I heard a product manager emphasize the key role played by XML in the suite of
products he was presenting. After the first dozen sentences to the effect that "this
feature wouldn't have been possible without XML," one of the attendees asked a candid
question: "Is there a function in which you didn't use XML?" The presenter's genuine
enthusiasm led everyone there (including myself) to believe that programming would no
longer be possible without a strong knowledge of XML. We were more than a little
reassured by the speaker's answer: "Oh no, we didn't use XML in the compiler."
Regardless of the hype that often accompanies it, XML truly is a key element in
software. Today, XML is more than just a software technology. XML is a fundamental
aspect of all forms of programming, as essential as water and air to every human being.
Just as human beings realistically need some infrastructure to take advantage of water
and air, programming forms of life must be supported by software tools to be effective
and express their potential in terms of interoperability, flexibility, and information. For
XML, the most important of these tools is the parser.
An XML parser reads in XML text and outputs a memory representation of the contents.
The input for an XML parser is always plain and platform-independent text, although
potentially encoded in a variety of character sets, whereas the output of an XML parser
is strictly tied to the underlying hardware and software platform. Depending on the
operating system and the programming environment of choice, an XML parser can
generate a Component Object Model (COM) object as well as a Java or a JScript class.
No matter the kind of output, however, the end result is XML data in a programmable
form.
The growing level of integration and orchestration that partner applications need makes
the exchanged XML code more and more sophisticated and often requires the use of
specialized dialects like Simple Object Access Protocol (SOAP) and XPath. As a result,
XML programming requires ad hoc tools for reading and writing in these dialects; all the
better if the tools are tightly integrated into some sort of programming framework.
Effective XML programming requires that you be able to generate XML in a more
powerful way than merely concatenating strings. The XML API must be extensible
enough to accommodate pluggable technologies and custom functionalities. And it
must be serializable and integrate well with other elements of data storage and
exchange, including databases, complex data types (arrays, tables, and lists), and—
why not?—visual user interface elements. In simple terms, XML must no longer be a
distinct API bolted onto the core framework, but instead be a fully integrated member of
the family. This is just what XML is in the Microsoft .NET Framework. And this book is
about XML programming with the .NET Framework.
1
What Is This Book About?
This book explores the array of XML tools provided by the .NET Framework. XML is
everywhere in the .NET Framework, from remoting to Web services, and from data
access to configuration. In the first part of this book, you'll find in-depth coverage of the
key classes that implement XML in the .NET platform. Readers and writers, validation,
and schemas are discussed with samples and reference information. Next the book
moves on to XPath and XSL Transformations (XSLT) and the .NET version of the XML
Document Object Model (XML DOM).
The final part of this book focuses on data access and interoperability and touches on
SQL Server 2000 and its XML extensions and .NET Remoting and its cross-platform
counterpart—XML Web services. You'll also find a couple of chapters about XML
configuration files and XML data islands and browser/deployed managed controls.
All of the sample files discussed in this book (and even more) are available through the
Web at the following address: http://www.microsoft.com/mspress/books/6235.asp. To
open the Companion Content page, click on the Companion Content link in the More
Information box on the right side of the page.
Although all the code shown in this book is in C#, the sample files are available both in
C# and in Microsoft Visual Basic .NET. Here are some of the more interesting
examples:
An XML reader that reads CSV files and exposes their contents as XML
An extended version of the XML DOM that detects changes to the disk file and
automatically refreshes its data
A Web service that offers dynamically created images
An XML reader class with writing capabilities
A class that serializes DataTable objects in a true binary format
A tool to track the behavior of the XML serializer class
A ListView control that retrieves its data from the host HTML page
These and other samples will get you on your way to XML in the .NET Framework.
2
What Do I Need to Use This Book?
Most of the examples in this book are Windows Forms or console applications. The key
requirements for running these applications are the .NET Framework and Microsoft
Visual Studio .NET. You also need to have SQL Server 2000 installed to make most of
the samples work, and a few examples make use of Microsoft Access 2000 databases.
The SQLXML 3.0 extensions are required for the samples in Chapter 8. The code has
been tested with the .NET Framework SP1.
The SQL Server examples in this book assume that the sa account uses a blank
password, although the use of such a blank password is strongly discouraged in any
professional development environment. If your SQL Server sa account doesn't use a
blank password, you'll need to add the sa password to the connection strings in the
source code. For example, if your sa password is "Hello", the following connection
string provides access to the Northwind database:
string nwind =
"SERVER=localhost;UID=sa;pswd=Hello;DATABASE=northwind;";
Some of the applications in this book require SOAP Toolkit 2.0 and SQLXML 3.0.
These products are available at the following locations:
Support
Every effort has been made to ensure the accuracy of this book and the contents of the
sample files. Microsoft Press provides corrections for books through the Web at the
following address:
http://www.microsoft.com/mspress/support/
To connect directly to the Microsoft Press Knowledge Base and enter a query regarding
a question or issue that you might have, go to:
http://www.microsoft.com/mspress/support/search.asp
If you have comments, questions, or ideas regarding this book or the sample files,
please send them to Microsoft Press using either of the following methods:
Postal mail:
3
Microsoft Press
Attn:Microsoft .NET XML Programming Editor
One Microsoft Way
Redmond, Wa 98052-6399
E-mail:
Please note that product support is not offered through the above mail addresses. For
support information, please visit the Microsoft Product Support Web site at
http://support.microsoft.com
4
Part I: XML Core Classes in the .NET Framework
Chapter List
Part Overview
5
Chapter 1: The .NET XML Parsing Model
Overview
XML is certainly a hot topic in the software community these days. As you read this,
probably a thousand or more IT managers are giving presentations that include XML in
one way or another. In fact, it's becoming almost redundant to emphasize the effect that
the use of XML can have on applications.
Today, XML is a natural element of all forms of programming life, just as water, sun,
and minerals are fundamental resources for every human being. To take full advantage
of XML, applications need some infrastructure built into the operating system or into the
underlying software platform. Normally, an XML infrastructure takes the form of tools
that provide for parsing, document validation, schema design, and transformations.
The Microsoft .NET Framework provides a comprehensive set of classes that let you
work with XML documents and related technologies at various levels and in strict
accordance with the most recent World Wide Web Consortium (W3C) standards and
recommendations. The XML support available in the .NET Framework covers XML 1.0,
XML namespaces, Document Object Model (DOM) Level 2 Core, XML Schema
Definition (XSD) Language, Extensible Stylesheet Language Transformations (XSLT),
and XPath expressions. In addition, XML core classes are tightly integrated with other
key portions of the .NET Framework, including data access, serialization, and
applications configuration.
In this chapter, we'll take an overall look at XML as it is used in the .NET Framework. In
particular, we'll focus on the new and innovative parsing model based on the concept of
reader components. This first chapter is aimed at providing you with the big picture of
the .NET Framework XML API, the key elements of transition from the previous
Component Object Model (COM)-based Win32 API, and a bird's-eye view of the
interconnections between XML and various parts of the .NET Framework.
The .NET Framework also provides for XML object serialization. The classes involved
with this functionality are grouped in the System.Xml.Serialization namespace. XML
serialization writes objects to, and reads them from, XML documents. This kind of
serialization is particularly useful over the Web in combination with the Simple Object
Access Protocol (SOAP) and within the boundaries of .NET Framework XML Web
services.
6
Related XML Standards
Table 1-1 lists the XML-related standards that have been implemented in the .NET
Framework. The table also provides the official URL for each standard for further
reference.
XSLT http://www.w3.org/TR/xslt
As a data exchange technology, XML is fully and tightly integrated into the .NET
Framework. Table 1-2 provides a quick schematic view of the main areas of the .NET
Framework in which significant traces of XML are clearly visible. Each area includes
numerous classes and provides a set of application-level functions.
7
Although not strictly part of the .NET Framework, another group of classes deserves
mention: the managed classes defined in the SQL Server 2000 XML Extensions
(SQLXML). SQLXML 3.0 extends the XML capabilities of SQL Server 2000 by
introducing Web services support. SQLXML 3.0 makes it possible for you to export
stored procedures as SOAP-based Web services and also extends ADO.NET
capabilities with server-side XPath queries and XML views. SQLXML 3.0 is available as
a separate download, but it seamlessly integrates with the existing installation of the
.NET Framework. We'll look at SQLXML 3.0 in more detail in Chapter 8.
In general, the entire set of XML classes provided with the .NET Framework offers a
standards-compliant, interoperable, extensible solution to today's software development
challenges. This support is not a tacked-on API but a true part of the .NET Framework.
Note Almost all of today's XML parsers support the latest W3C
specification for the DOM Level 2 Core. The current specification
does not define a standard interface to persist and restore contents,
however, although the most popular XML parsers, such as
Microsoft's XML Core Services (MSXML)—formerly known as the
Microsoft XML Parser—and some others based on Java, already
have their own ways to persist objects to streams and to restore
objects from them. These mechanisms have yet to be considered
as custom and platform-specific extensions. An official API for
serializing documents to and from XML format will not be available
until DOM Level 3 Core achieves the status of a W3C
recommendation. As of summer 2002, DOM Level 3 Core is
qualified as a work in progress. The publicly available draft defines
the specification for a pair of Load and Save methods designed to
enable loading XML documents into a DOM representation and
saving a DOM representation as an XML document. For more
information, refer to http://www.w3.org/TR/2002/WD-DOM-Level-3-
Core-20020409.
A known parser that already provides an experimental
implementation of DOM Level 3 Core is IBM's XML Parser for Java
(Xml4J). See http://www.alphaworks.ibm.com/tech/xml4j for more
information.
Regardless of the underlying platform, the available XML parsers fall into one of two
main categories: tree-based parsers and event-based parsers. Each parser category is
designed according to a different philosophical approach and, subsequently, has its
own pros and cons. The two categories are commonly identified with their two most
popular implementations: XMLDOM and Simple API for XML (SAX). The XMLDOM
parser is a generic tree-based API that renders an XML document as an in-memory
structure. The SAX parser provides an event-based API for processing each significant
element in a stream of XML data.
8
XMLDOM model (memory footprint and bandwidth required to process large
documents) are structural and stem directly from design choices.
SAX parsers work by letting client applications pass living instances of platform-specific
objects to handle parser events. The parser controls the whole process and pushes
data to the application, which is in turn free to accept or simply ignore the data. The
SAX model is extremely lean and features a limited complexity in space.
The .NET Framework provides full support for the XMLDOM parsing model but not for
the SAX model. The set of .NET Framework XML core classes supports two parser
models: XMLDOM and a new model called an XML reader. The lack of support for SAX
parsers does not mean that you have to renounce the functionality that a SAX parser
can bring, however. All the functions of a SAX parser can be easily and even more
effectively implemented using an XML reader. Unlike a SAX parser, a .NET Framework
XML reader works under the total control of the client application, enabling the
application to pull out only the data it really needs and skip over the remainder of the
XML stream.
Readers are based on .NET Framework streams and work in much the same way as a
database cursor. Interestingly, the classes that implement this cursor-like parsing model
also provide the substrate for the .NET Framework implementation of the XMLDOM
parser. Two abstract classes—XmlReader and XmlWriter—are at the very foundation of
all .NET Framework XML classes, including XMLDOM classes, ADO.NET-related
classes, and configuration classes. So in the .NET Framework you have two possible
approaches when it comes to processing XML data. You can use either any classes
directly built onto XmlReader and XmlWriter or classes that expose information through
the well-known XMLDOM.
The set of XML core classes also includes tailor-made class hierarchies to support
other related XML technologies such as XSLT, XPath expressions, and the Schema
Object Model (SOM).
We'll look at XML core classes and related standards in the following chapters. In
particular, Chapter 2, Chapter 3, Chapter 4, and Chapter 5 describe the core classes
and parsing models. Chapter 6 and Chapter 7 examine the related standards, such as
XPath and XSL.
The interaction between ADO.NET classes and XML documents takes one of two
forms:
Serialization of ADO.NET objects (in particular, the DataSet object) to
XML documents and corresponding deserialization. Data can be saved to
XML in a variety of formats, with or without schema information, as a full
snapshot of the in-memory data including pending changes and errors, or
with just the current instance of the data.
A dual-access model that lets you access and update the same piece of
data either through a hierarchical programming interface or using the
ADO.NET relational API. Basically, you can transform a DataSet object
into an XMLDOM object and view the XMLDOM's subtrees as tables
merged with the DataSet object's tables.
The ADO.NET DataSet class represents the only .NET Framework object that can be
natively saved to XML. The XML representation of a DataSet object can have two
different layouts: the ADO.NET normal form and the DiffGram format. In particular, the
DiffGram format describes the history of the data and all recent changes. Each
changed row in each table is represented by two nodes: the first node contains the
9
snapshot of the row as it was originally read, and the second node contains the current
values. The DiffGram represents a snapshot of the DataSet state and contents at a
given moment. To write DiffGrams, ADO.NET uses an XmlWriter object.
The integration of and interaction between XML and ADO.NET classes is discussed in
Chapter 8.
Application Configuration
Before Microsoft Windows 95, applications stored configuration settings to a text file
with a .ini extension. INI files store information using name/value pairs grouped under
sections. Ultimately, an INI file is a collection of sections, with each section consisting of
any number of name/value pairs.
Windows 95 revamped the role of the system registry—a centralized data repository
originally introduced with Windows NT. The registry is a collection of binary files that the
operating system manages in exclusive mode. Client applications can read and write
the contents of the registry only by using a tailor-made API. The registry works as a
kind of hierarchical database consisting of root nodes (also known as hives), nodes,
and entries. Each entry is a name/ value pair.
All system, component, and application settings are supposed to be stored in the
registry. The registry continues to increase in size, contributing to the creation of a
configuration subsystem with a single (and critical) point of failure. More recently,
applications have been encouraged to store custom settings and preferences in a local
file stored in the application's root folder. For .NET Framework applications, this
configuration file is an XML file written according to a specific schema.
In addition, the .NET Framework provides a specialized set of classes to read and write
settings. The key class is named AppSettingsReader and works as a kind of parser for
a small fragment of XML code—mostly a node or two with a few attributes.
The contents of a CONFIG file is logically articulated into sections. The .NET
Framework provides a number of predefined sections to accommodate Web and
Windows Forms settings, remoting parameters, and ASP.NET run-time characteristics
such as the authentication scheme and registered HTTP handlers and modules.
User-defined applications can extend the XML schema of the CONFIG file by defining
custom sections with custom elements. By default, however, the AppSettingsReader
class supports only settings expressed in a few formats, such as name/value pairs and
a single tag with as many attributes as needed. This schema fits the bill in most cases,
but when you have complex structured information, it soon becomes insufficient.
Information is read from a section using special objects called section handlers. If no
predefined section structure fits your needs, you can provide a tailor-made
configuration section handler to read your own XML data, as shown here:
<configuration>
<configSections>
<section name="MySection"
type="MySectionHandlerClass, assembly" />
</configSections>
10
Random documents with unrelated
content Scribd suggests to you:
that she could not rest. The house was very still now; all the
servants had long since gone to bed. They were a set of faithful but
utterly stupid peasants from the village, and had no notion of what
went on outside the park gates. Matthieu Renard and Annette knew,
and they remained on the watch. Old Matthieu would not go to bed
until he could bring Madame la Marquise some news which would
comfort her, and Annette waited where she could hear the bell, in
case Madame wanted anything.
Madame, sitting by the open window, peered out into the night. The
firing sounded more distant now and more intermittent; the rain had
ceased and the darkness was less intense. Overhead large patches
of star-studded indigo appeared between the fissures in the clouds.
The weary watcher, gazing out into nothingness, her eyes aching
with sleeplessness and many unshed tears, fell anon into a semi-
wakeful languor, while the early hours of the morning sped leaden-
footed by.
Suddenly something woke her to full consciousness. She sat up,
shivering a little; the morning air struck fresh and cool against her
face. Through her torpor-like sleep she had been conscious of the
swift gallop of a horse on the hard road drawing rapidly nearer. Now
she was fully awake, she could hear the clatter of the hoofs—
someone was coming along at break-neck speed—bringing news
probably. She jumped to her feet; the horse had been brought to a
halt outside the gates; the next moment she heard a murmur of
voices and then the sound of footsteps coming up the drive.
Madame, leaning out of the window, called out peremptorily: "Who
goes there?"
But she received no reply. Whoever had arrived at this early hour
had gone into the house. Through the dream-like recollections of
what she had heard, it seemed to Denise that the voice of Fernande
had mingled with that of two men, one of whom might have been
old Matthieu.
She rang the bell violently. Then she looked at the clock. It was close
on five.
After a few minutes there was a knock at the door, and in response
to an impatient "Come in!" it was opened, and Fernande, pale,
obviously tired to death, and with dark circles under her eyes, came
into the room.
"What is it?" queried Madame, in a voice broken by fatigue and
nerve-strain.
"One of the overseers from the armament works, ma tante," replied
Fernande, "with a message from M. de Maurel."
"I desire no message from M. de Maurel," said Madame curtly; "let
him tell you what he wants and go back the way he came."
"There is another man with him, ma tante," hazarded Fernande,
after some hesitation—"one of our people—a prisoner with news of
M. de Puisaye."
Madame waited a moment or two, frowning, debating between her
pride which prompted her to refuse to see an emissary of de Maurel,
and the agony of suspense which was near to killing her. Anxiety
gained the victory.
"Very well," she said. "Let the men come up."
Fernande went, and a minute or two later she returned followed by
two men, one of whom was Mathurin, chief overseer of the de
Maurel smelting works. Both men looked as if they had ridden hard.
Mathurin's coat and hat were covered with dust; the other—a true
type of the Chouans, of those who had fought under de Frotté and
Cadoudal—was dressed in a tattered blouse and ragged linen
breeches; the soles of his boots had parted from their uppers; he
was unkempt and unwashed. Fernande closed the door behind
them, then she slipped round behind Madame to the corner by the
open window, where she could feel the fresh morning air and rest
her aching head against the heavy curtain. Mathurin had already told
her briefly what he had been sent to say: his orders were to see
Mademoiselle de Courson first, and then Madame la Marquise if she
asked for him. Fernande, ensconced beside the window, unseen by
her aunt, could safely indulge in the luxury of tears and of silence.
When the men entered, Madame la Marquise had looked for a
moment keenly and searchingly at the old Chouan. She was ready
and eager to catch the slightest movement or flitting glance which
might have been meant for a signal. She felt anxious and puzzled,
marvelling why de Maurel had sent a messenger to her—at this hour
—and what was the meaning of this prisoner brought hither to speak
with her. Then she turned haughtily to Mathurin.
"Who has sent you?" she queried peremptorily.
"M. le Maréchal Comte de Maurel," replied Mathurin, after he had
touched his forelock with every mark of respect.
"And who are you?" asked Madame again.
"Chief overseer at the smelting works."
"Why did M. de Maurel send you?"
"M. le Maréchal thought Madame la Marquise and Mademoiselle de
Courson would be anxious to know what had happened last night."
"Well," she said coldly, "what did happen?"
"Our alarm bells and sirens went off at half-past ten, Madame la
Marquise."
"I know that—I heard them."
"The mutineers, with Paul Leroux at their head, have been arrested
by our watchmen. Leroux confessed that he had been bribed to
murder M. le Maréchal, and to deliver the armament works into the
hands of a band of Royalists under M. de Puisaye."
"Did M. de Maurel order you to say this?"
"He desired Madame la Marquise to know that Leroux was a coward
as well as a traitor."
"Leroux' personality.... Who is Leroux, by the way?... does not
interest me. Go on."
"Our sirens aroused the garrison of Domfront. The commandant sent
over one of his officers with a small detachment of infantry to see
what was amiss. He only thought of fire or of a mutiny among the
convicts, and he was ready to send us help."
"Well? And then?"
"M. le Maréchal interrogated Leroux in the presence of the officer.
Leroux made a clean breast of all he knew. M. de Maurel then sent
his own couriers from the works to Domfront, to Tinchebrai, and to
Mortain, warning the different commandants against possible attacks
from roaming bands of Chouans. Within a couple of hours all the
garrisons were afoot and in touch with one another."
"Then what happened?"
"This man here, Madame la Marquise," said Mathurin, indicating his
companion, "will be able to tell you better than I can what happened
in the ranks of the Chouans. He fell a prisoner in our hands early in
the night. M. le Maréchal had ridden over to Mortain, and I was with
him when this man was brought in a prisoner. M. le Maréchal
questioned him, and then gave him over into my charge. 'Take the
fellow over to La Frontenay, Mathurin,' he said to me. 'Madame la
Marquise de Mortain and Mademoiselle de Courson will want to hear
what he has to say.' So we both got to horse and rode hither as fast
as we could."
"Very good," said Madame determinedly. "Leave the man here with
me. I desire to speak with him alone."
Mathurin, at the peremptory command, appeared to hesitate.
"Madame la Marquise ..." he stammered.
"Ah çà," she retorted haughtily, "has M. de Maurel sent you here
perchance as my jailer?"
Mathurin, thus challenged, did not know what to say. Madame la
Marquise had a way with her which imposed her will on every one
around her. The worthy overseer was certainly not vested with
powers to gainsay her wishes. He was a shrewd man, loyal to the
depth of his simple heart and ready to be hacked to pieces for M. le
Maréchal; he would have defied an army of haughty ladies if he
thought any harm could come from a private interview with this ill-
conditioned old rascal; but in this case prudence and conciliation was
perhaps the wisest course. And somehow he felt that Mademoiselle
de Courson's presence was, in any case, a safeguard against any
further intrigues against his master. So after an imperceptible
moment of hesitation he made a curt obeisance and backed out of
the room, closing the door behind him.
Far be it from me to suggest that good old Mathurin listened at the
keyhole, but I make bold to assert that very little of Madame la
Marquise's private conversation with the old Chouan escaped him.
III
As soon as the door had closed on Mathurin, Denise de Mortain
turned to the man and said, speaking curtly and rapidly:
"Your name is Jean Blanchet. I know you. Well, tell me quickly
everything you know. When was the alarm given in your camp?"
"At about half-past eleven, Madame la Marquise," replied the man. "I
and six of my mates were patrolling the approaches of the town,
when we heard a rumour that the garrison inside the city was astir.
News had arrived, so 'twas said, that bands of Chouans were
preparing a surprise attack. M. de Puisaye had his headquarters in
the Cerf-Volant woods south of the town; there was only just time to
run and warn him of what was in the air."
"Well?"
"M. de Puisaye at once ordered the alarm to be sounded. Within ten
minutes the whole camp was afoot and M. de Puisaye then
commanded the retreat."
"What?" exclaimed Madame. "Without striking a blow?"
"What would have been the use?" retorted the man with a shrug of
the shoulders. "We had next to no arms, and to make a stand would
have meant fighting against at least two companies of infantry and a
battery of artillery, which could easily have cut us to pieces even
before reinforcements came from Tinchebrai and Domfront. There is
a half-battery of artillery at both those places, and we knew by then
that all the garrisons round were in touch with one another. To have
made a stand," reiterated the man gruffly, "would have meant
useless bloodshed. M. de Puisaye was alive to that. He chose the
wiser course."
"Not the most heroic," murmured Madame, under her breath.
"He had a lot of undisciplined, ill-fed, ill-clothed men to look after.
What could he do? Now if we could have equipped ourselves at the
factories of La Frontenay ..." he added with a harsh laugh.
"I know, I know," said Madame impatiently. "And M. de Puisaye has
retreated—whither?"
"I do not know. To Avranches, I should say. The way was open, and,
in any case, his losses would be very slight."
"And...." A name was on Madame's lips; she checked herself. She did
not dare to speak it—not before this man ... in case....
"And M. de Courson?" she asked.
"M. de Courson must be with M. de Puisaye, I think. I believe M.
d'Aché is with him and M. Prigent."
Then at last anxiety could hold out no longer. Madame had made
heroic efforts to appear calm, but now the hoarse query broke from
her lips: "And M. le Marquis de Mortain?"
Was it her own fevered fancy? But it seemed to her as if the man
hesitated for a second or two ere he replied; he twisted his cap
between his fingers, and a shock of unruly hair falling over his
forehead hid the expression of his eyes.
"M. de Puisaye sent orders to M. de Mortain," he said at last, "to
defend the rear in case the commandant of the garrison got wind of
the retreat and sent a company in pursuit. But M. de Mortain was
not at his post then. M. de Fleurot was in command."
Madame leaned her weight against the chair close by; she passed
her tongue once or twice over her parched lips. The man was
evidently determined not to meet her eye.
"What," she asked after a while, "was the firing which I heard in the
direction of Mortain?"
"M. de Fleurot," replied Blanchet curtly, "fighting a rearguard action
and covering the main retreat. I was in his company."
"And ... what was the result ... of the action, I mean?"
"I cannot say. I was taken prisoner quite early. I only heard rumours
afterwards."
"What were they?"
"That our small contingent was entirely cut up ... there were some
prisoners taken ... but it is generally believed that scarce a man
escaped."
"And ... has anything been heard of M. de Puisaye?"
"No, Madame la Marquise, nothing."
"Or of M. de Courson, or any of the others?"
"No. But," added Blanchet significantly, as he nodded in the direction
of the door, "I believe that Mathurin there knows something."
"You think ..." began Madame involuntarily. Then she paused;
something in the man's look—furtive and compassionate—froze the
words upon her lips.
"Can't you tell me?" she asked under her breath.
"I don't know for certain, Madame la Marquise," he replied.
IV
It meant another struggle against resentment and against pride.
But, in any case, the present uncertainty was unendurable. Denise
de Mortain felt that she would have gone on her knees to the devil
himself if he brought her authentic news of Laurent. She went boldly
to the door, and, opening it, she called:
"Mathurin! Are you there?"
"At your orders, Madame la Marquise," replied the man.
He came back into the room, reluctantly this time. He was a good
fellow, with wife and children of his own. Temperamentally and
traditionally he hated these Royalists—packs of rebels and intriguers,
he called them—and he knew this haughty lady had plotted against
her own son—M. le Maréchal—whom he adored; but there was
something which he had yet to tell her, and in his own rough way he
shrank from the task, feeling nothing but pity for her, because of
what she was doomed to suffer.
"The prisoner tells me," began Madame la Marquise, as calmly as
she could, "that you can give me news of M. le Marquis de Mortain,
my son. Is that so?"
"Yes, Madame la Marquise," replied the man slowly.
"Well," she asked, "why did you not give me that news at once?"
Thus commanded, Mathurin could not help but obey as quickly as
possible. He shifted from one foot to the other, and a look of real
pity softened for a moment the rugged lines of his face.
"Well, Madame la Marquise," he began, "you must know that after
the fight with M. de Puisaye's rearguard we had several prisoners in
our hands. M. le Maréchal took the trouble to interrogate each one
separately. When he had finished, he ordered me to accompany him,
and together we went to the spot where the affray had taken place.
It was on the edge of the wood. It was then about three o'clock in
the morning and the dawn was breaking. The place was littered with
dead. I counted over sixty myself, among them young M. de Fleurot,
whom I knew."
"Yes?" said Madame la Marquise quietly, for the man had paused.
She knew well enough what he was about to tell her. He looked her
straight in the eyes. They expressed a query, and he nodded silently
in reply. A low moan of pain broke from Madame's lips; she pressed
her handkerchief to her lips to smother a louder cry.
"M. le Maréchal found M. le Marquis de Mortain lying amongst the
dead," said Mathurin slowly after a while. "He told me to tell
Madame la Marquise that M. Laurent must have died like a hero; he
had a broken sword in his hand and three bullet wounds in his
chest.... M. le Maréchal lifted him up in his arms and carried him to
his horse. I helped to lift the body into the saddle, and M. le
Maréchal ordered me to ride back to Mortain as fast as I could and
to send out half a dozen men to him at once. 'When you have done
that, Mathurin,' he said to me, 'go to La Frontenay as quickly as may
be, take the prisoner Jean Blanchet with you, and see Madame la
Marquise de Mortain and Mademoiselle de Courson. Tell them that I
have conveyed M. le Marquis to the Château of Courson, and that
there I will await their pleasure.' And that is all, Madame la
Marquise," concluded Mathurin clumsily, for, indeed, he felt
overawed by the look of hopeless grief which had spread over
Madame's marble-like face. "M. le Maréchal ordered the carriole to
be sent for Madame la Marquise. It should be here by now."
When he had finished speaking she gave him a stately nod.
"I thank you, good Mathurin," she said slowly. "I pray you go back to
your master now and tell him that Mademoiselle Fernande and I will
be at the Château of Courson within the hour."
She appeared like a statue, pale and unbending. One slender hand
rested on the back of the chair to steady herself; the other closed
tightly over her lace handkerchief. The kerchief round her shoulders
looked less white than her cheeks: the golden light of a summer's
morning crept in through the narrow window. A glorious sunshine
followed on the storm of the night; the warm rays glinted on
Madame's white hair, on her pale forehead and on the rings upon
her fingers. Mathurin, who had been in Paris in the hot days of the
Terror, remembered, as he looked on her, the martyred Queen going
to her death.
He gave a sign to Jean Blanchet. He would not have dared to say
another word; he felt the majesty of this overwhelming grief, and,
having made a profound obeisance, he and the old Chouan went out
of the room.
V
Fernande's arms were round the unfortunate woman who had sunk
half-swooning into the chair.
So this was the end of it all: the sequel of so many intrigues, so
many hopes, of the carefully-laid plans and the certainty of victory.
Laurent, with his tempestuous, impulsive nature, had atoned with
his life for his one hour of folly; the small band of Royalists was
dispersed, its leaders fugitives; and a proud and self-willed woman
would henceforth be destined to eat out her heart in vain remorse
and regret. Callously she would have sacrificed one son, even whilst
God decreed that He would take the other. Laurent de Mortain had
fallen a victim to the dastardly attempt planned against his brother,
just as much as to the unreasoning jealousy which had made him
desert his post and forfeit his honour.
Madame la Marquise was a broken old woman now; even her hatred
against Fernande was swallowed up in the immensity of her grief.
She allowed the young girl to attend on her, to find her mantle and
hood, and then gently to lead her downstairs. She could not bring
herself to speak to her, however; in her heart, beside the bitterness
of self-reproach, there lurked the dull resentment against the woman
who had ruled over her son's heart until the hour of his death.
Half an hour later the two women, sitting side by side in the carriole,
were driven rapidly to Courson.
CHAPTER XXV
THE WHITE PIGEON
I
Fernande waited in the hall below while Madame la Marquise went
upstairs to see the last of her son. Half a dozen men from the La
Frontenay works formed a guard of honour for the dead.
It was impossible even for Fernande, who knew her aunt so well, to
guess at what Denise de Mortain felt. Her heart was so little capable
of grief, that it was doubtful whether she really mourned Laurent, or
whether pride, in that he died a hero's death, acted as a soothing
balm upon her sorrow. When half an hour later she rejoined her
niece in the small boudoir downstairs, she appeared outwardly quite
calm, and talked of nothing but the new plans which already were
seething in her brain, and which were destined to retrieve the
mistakes of the night.
"De Puisaye was wise," she said, "not to jeopardize his forces. They
are practically intact, ready for a coup which must in the near future
be successful. We fell into many grave errors this time, and we shall
now stand in the happy position of being forewarned."
Fernande thought it best to say nothing. What had been the use of
arguing that Marshal de Maurel was also forewarned now?
"I have not given up the idea of a possible seizure of the La
Frontenay works," Madame went on in her cold and placid way, just
as if all her schemes of the past twelve months had not culminated
in the death of the one being in the world whom she had professed
to love; "but I still think that my own original idea when I first came
to Courson last year, of being in open amity with my son Ronnay,
was the wisest after all. I must speak with your father and with de
Puisaye about that."
Fernande kept back, with difficulty, an exclamation of horror. More
schemes! more intrigues! more tortuous by-paths! Was the whole of
her young life to be linked indissolubly to this endless chain of
treachery? Was she to be passively acquiescent—a tool, where need
be—whenever plots were hatched that revolted her every sense of
loyalty and of truth? Fortunately for her, Madame was too deeply
engrossed in her own calculations to pay much attention to her, and
after a while she—Fernande—was able to escape out of the boudoir
where the atmosphere had already become stifling.
With aching heart she bade a final adieu to Laurent—the companion
of her childhood, the man for whom she had such a tender affection
and whom she had never loved, but also the man to whom she
would have remained rigidly true, despite all that he would have
made her suffer.
Then she went out into the park.
Yet another year of neglect had gone over the terraces and the
walks. It looked perhaps a shade more tangled, a shade more
forlorn. The heavy rain of the night before had broken down the
slender, unpruned twigs of the roses, and the paths were littered
with young branches torn from the parent trees. The scent of wet
earth mingled with the fragrance of heliotrope and white acacia;
there was a riot of bird-song in the old chestnuts and a hum of bees
in the avenue of limes.
II
She wandered on, almost like a sleep-walker in a happy dream; her
feet and the hem of her gown were soaked through with the sweet-
smelling raindrops that still clung to the grass; the wet branches of
the young chestnuts beat against her face as she plunged into the
coppice. Her lips were parted in a strange, elusive smile, and her
eyes gazed into the distance, right through the thicket, as if a
compelling voice was calling to her from afar.
A soft breeze stirred the branches of the mountain-ash overhead,
the scent of elder and acacia went to her head like wine.
He was waiting for her beside the silent pool, and as soon as she
saw him, she knew that he had called to her, and that the
compelling power of his love had drawn her to him, through park
and orchard and fields, in answer to his call.
She stood still on the other side of the pool, and for a moment they
looked across at one another, with the banks of moss and
meadowsweet between them and a whole world around of love and
trust and promise of happiness. No words could be spoken between
them, because there was so much still that must part them for a
while. He understood that well enough, for he always understood;
but she had come to him on this the first morning, when his every
thought, every feeling, had called to her to come, and now he would
be satisfied to wait—that was his way—to wait and bide his time,
knowing by the look in her eyes, by the unspoken avowal on her
sweet lips, that she would come again.
The breeze sighed among the branches of the trees, the birch
whispered to the larch, the chestnut to the oak, and a gentle ripple
stirred the twigs of the meadowsweet. And from somewhere within
the bosom of the silent pool there came the soft and melancholy call
of a number of wood-pigeons.
And to this man and this woman, who stood here in a world of their
own, a world peopled with angels and fairies and sprites, and with
everything that is most fair and most exquisite, it seemed as if from
out the pool there rose something ethereal, luminous and white,
something that was so sacred and pure, that it rose straightway
heavenward, and was soon merged with the fleecy clouds overhead,
whilst the call of the fairy pigeons was stilled.
The trance-like vision lasted only a moment. De Maurel slowly
dropped on his knees, and above the murmurings of the wood
Fernande heard the voice of the man she loved calling to her:
"You will come to me, my beloved?"
And she replied: "Very soon!"
THE END
Updated editions will replace the previous one—the old editions will
be renamed.
1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.
1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.
• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”
• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.
1.F.
1.F.4. Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
Please check the Project Gutenberg web pages for current donation
methods and addresses. Donations are accepted in a number of
other ways including checks, online payments and credit card
donations. To donate, please visit: www.gutenberg.org/donate.
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebookultra.com