Kształt XML dokumentów WordprocessingML (LINQ to XML)
W tym artykule przedstawiono kształt XML dokumentu WordprocessingML.
Formaty pakietu Microsoft Office
Natywny format pliku dla systemu Microsoft Office 2007 to Office Open XML (powszechnie nazywany open XML). Open XML to format oparty na formacie XML, który jest standardem Ecma i obecnie przechodzi proces standardów ISO-IEC. Język znaczników dla plików przetwarzania wyrazów w formacie Open XML nosi nazwę WordprocessingML. W tym samouczku użyto plików źródłowych WordprocessingML jako danych wejściowych dla przykładów.
Jeśli używasz pakietu Microsoft Office 2003, możesz zapisywać dokumenty w formacie Office Open XML, jeśli zainstalowano pakiet zgodności pakietu Microsoft Office dla programów Word, Excel i PowerPoint 2007.
Kształt dokumentów WordprocessingML
Pierwszą rzeczą do zrozumienia jest kształt XML dokumentów WordprocessingML. Dokument WordprocessingML zawiera element treści (o nazwie w:body
), który zawiera akapity dokumentu. Każdy akapit zawiera co najmniej jeden przebieg tekstu (o nazwie w:r
). Każdy przebieg tekstu zawiera co najmniej jeden element tekstowy (o nazwie w:t
).
Poniżej przedstawiono bardzo prosty dokument WordprocessingML:
<?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>
Ten dokument zawiera dwa akapity. Oba te elementy zawierają pojedynczy przebieg tekstu, a każdy przebieg tekstu zawiera pojedynczy element tekstowy.
Najprostszym sposobem wyświetlenia zawartości dokumentu WordprocessingML w formularzu XML jest utworzenie go przy użyciu programu Microsoft Word, zapisanie go, a następnie uruchomienie następującego programu, który wyświetla kod XML w konsoli programu .
W tym przykładzie użyto klas znalezionych w zestawie WindowsBase. Używa typów w System.IO.Packaging przestrzeni nazw.
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