Partekatu honen bidez:


Forma XML de documentos WordprocessingML (LINQ to XML)

En este artículo se presenta la forma XML de un documento WordprocessingML.

Formatos de Microsoft Office

El formato de archivo nativo para el sistema de Microsoft Office 2007 es Office Open XML (comúnmente denominado Open XML). Open XML es un formato basado en XML que es un estándar Ecma y que actualmente está pasando por el proceso de estandarización de ISO-IEC. El lenguaje de marcado para los archivos de procesamiento de texto en Open XML se denomina WordprocessingML. En este tutorial se usan archivos de origen wordprocessingML como entrada para los ejemplos.

Si usa Microsoft Office 2003, puede guardar documentos en el formato Office Open XML si ha instalado el Paquete de compatibilidad de Microsoft Office para Formatos de archivo de Word, Excel y PowerPoint 2007.

La forma de los documentos WordprocessingML

Lo primero que hay que entender es la forma XML de los documentos WordprocessingML. Un documento WordprocessingML contiene un elemento body (denominado w:body) que contiene los párrafos del documento. Cada párrafo contiene una o varias ejecuciones de texto (denominadas w:r). Cada ejecución de texto contiene una o varias partes de texto (denominadas w:t).

A continuación se muestra un documento WordprocessingML muy sencillo:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<w:document
xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">
  <w:body>
    <w:p w:rsidR="00E22EB6"
         w:rsidRDefault="00E22EB6">
      <w:r>
        <w:t>This is a paragraph.</w:t>
      </w:r>
    </w:p>
    <w:p w:rsidR="00E22EB6"
         w:rsidRDefault="00E22EB6">
      <w:r>
        <w:t>This is another paragraph.</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:document>

Este documento contiene dos párrafos. Ambos contienen una sola ejecución de texto y cada ejecución de texto contiene una sola parte de texto.

La manera más fácil de ver el contenido de un documento WordprocessingML en formato XML es crear uno mediante Microsoft Word, guardarlo y, a continuación, ejecutar el siguiente programa que imprime el XML en la consola.

En este ejemplo se usan clases que se encuentran en el ensamblado windowsBase. Utiliza los tipos del espacio de nombres System.IO.Packaging.

const string documentRelationshipType =
  "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
const string wordmlNamespace =
  "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
XNamespace w = wordmlNamespace;

using (Package wdPackage = Package.Open("SampleDoc.docx", FileMode.Open, FileAccess.Read))
{
    PackageRelationship relationship =
        wdPackage
        .GetRelationshipsByType(documentRelationshipType)
        .FirstOrDefault();
    if (relationship != null)
    {
        Uri documentUri =
            PackUriHelper.ResolvePartUri(
                new Uri("/", UriKind.Relative),
                relationship.TargetUri);
        PackagePart documentPart = wdPackage.GetPart(documentUri);

        //  Get the officeDocument part from the package.
        //  Load the XML in the part into an XDocument instance.
        XDocument xdoc =
            XDocument.Load(XmlReader.Create(documentPart.GetStream()));
        Console.WriteLine(xdoc.Root);
    }
}
Imports <xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">

Module Module1
    Sub Main()
        Dim documentRelationshipType = _
          "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"

        Using wdPackage As Package = _
          Package.Open("SampleDoc.docx", _
                       FileMode.Open, FileAccess.Read)
            Dim docPackageRelationship As PackageRelationship = wdPackage _
                .GetRelationshipsByType(documentRelationshipType).FirstOrDefault()
            If (docPackageRelationship IsNot Nothing) Then
                Dim documentUri As Uri = PackUriHelper.ResolvePartUri( _
                            New Uri("/", UriKind.Relative), _
                            docPackageRelationship.TargetUri)
                Dim documentPart As PackagePart = wdPackage.GetPart(documentUri)

                ' Get the officeDocument part from the package.
                ' Load the XML in the part into an XDocument instance.
                Dim xDoc As XDocument = _
                    XDocument.Load(XmlReader.Create(documentPart.GetStream()))
                Console.WriteLine(xDoc.Root)
            End If
        End Using
    End Sub
End Module

Consulte también