Java and .NET take fundamentally different approaches to the provision of XML parsing and transformation technologies.
Java implements factory classes through which concrete parsers are created; parsers themselves are defined by a set of interfaces. This allows the programmer to use any compliant parser or transformer implementation that can be plugged into the generic XML framework.
The .NET implementations are based on a set of abstract classes; customizing the parsers involves deriving new functionality from the existing base classes. The use of a custom parser requires the explicit instantiation of the customized class.