Aracılığıyla paylaş


WordprocessingML belgelerinin XML şekli (LINQ to XML)

Bu makalede, WordprocessingML belgesinin XML şeklitanıt.

Microsoft Office biçimleri

2007 Microsoft Office sisteminin yerel dosya biçimi Office Open XML'dir (genellikle Open XML olarak adlandırılır). Open XML, Ecma standardı olan XML tabanlı bir biçimdir ve şu anda ISO-IEC standartları sürecinden geçmektedir. Open XML içindeki sözcük işleme dosyalarının işaretleme dili WordprocessingML olarak adlandırılır. Bu öğreticide, örnekler için giriş olarak WordprocessingML kaynak dosyaları kullanılır.

Microsoft Office 2003 kullanıyorsanız, Word, Excel ve PowerPoint 2007 Dosya Biçimleri için Microsoft Office Uyumluluk Paketi'ni yüklediyseniz, belgeleri Office Open XML biçiminde kaydedebilirsiniz.

WordprocessingML belgelerinin şekli

Anlaşılması gereken ilk şey, WordprocessingML belgelerinin XML şeklidir. WordprocessingML belgesi, belgenin paragraflarını içeren bir gövde öğesi (adlandırılmış w:body) içerir. Her paragraf bir veya daha fazla metin çalıştırması (adlı) w:riçerir. Her metin çalıştırması bir veya daha fazla metin parçası (adlı) w:tiçerir.

Çok basit bir WordprocessingML belgesi aşağıdadır:

<?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>

Bu belge iki paragraf içerir. Her ikisi de tek bir metin çalıştırması içerir ve her metin çalıştırması tek bir metin parçası içerir.

WordprocessingML belgesinin içeriğini XML biçiminde görmenin en kolay yolu, Microsoft Word kullanarak bir belge oluşturmak, kaydetmek ve ardından XML'yi konsola yazdıran aşağıdaki programı çalıştırmaktır.

Bu örnek, WindowsBase derlemesinde bulunan sınıfları kullanır. Ad alanında System.IO.Packaging türleri kullanır.

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

Ayrıca bkz.