2010-12-13 1 views
4

Ich möchte auf einige integrierte Eigenschaften (wie Autor, Datum der letzten Änderung, etc.) einer geöffneten XML-Word-Dokument-Datei zugreifen. Ich möchte zu diesem Zweck Open Xml SDK2.0 verwenden. Also frage ich mich, ob es irgendeine Klasse oder irgendeine Art gibt, wie ich programmatisch auf diese eingebauten Eigenschaften zugreifen könnte.wie programmgesteuert auf die integrierten Eigenschaften einer geöffneten XML-Worddoc-Datei zugreifen

+0

Schauen Sie sich diesen Code an, um ein paar nette Tipps zu erhalten: [https://searchcode.com/codesearch/view/10033886/](https://searchcode.com/codesearch/view/10033886/). – AnorZaken

Antwort

8

Eine Erklärung der folgenden Methode kann here, aber ziemlich viel finden müssen Sie in den Eigenschaften zu übergeben, die Sie aus der core.xml Datei zu dieser Methode erhalten mögen und es wird den Wert zurück:

public static string WDRetrieveCoreProperty(string docName, string propertyName) 
{ 
    // Given a document name and a core property, retrieve the value of the property. 
    // Note that because this code uses the SelectSingleNode method, 
    // the search is case sensitive. That is, looking for "Author" is not 
    // the same as looking for "author". 

    const string corePropertiesSchema = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties"; 
    const string dcPropertiesSchema = "http://purl.org/dc/elements/1.1/"; 
    const string dcTermsPropertiesSchema = "http://purl.org/dc/terms/"; 

    string propertyValue = string.Empty; 

    using (WordprocessingDocument wdPackage = WordprocessingDocument.Open(docName, true)) 
    { 
     // Get the core properties part (core.xml). 
     CoreFilePropertiesPart corePropertiesPart = wdPackage.CoreFilePropertiesPart; 

     // Manage namespaces to perform XML XPath queries. 
     NameTable nt = new NameTable(); 
     XmlNamespaceManager nsManager = new XmlNamespaceManager(nt); 
     nsManager.AddNamespace("cp", corePropertiesSchema); 
     nsManager.AddNamespace("dc", dcPropertiesSchema); 
     nsManager.AddNamespace("dcterms", dcTermsPropertiesSchema); 

     // Get the properties from the package. 
     XmlDocument xdoc = new XmlDocument(nt); 

     // Load the XML in the part into an XmlDocument instance. 
     xdoc.Load(corePropertiesPart.GetStream()); 

     string searchString = string.Format("//cp:coreProperties/{0}", propertyName); 

     XmlNode xNode = xdoc.SelectSingleNode(searchString, nsManager); 
     if (!(xNode == null)) 
     { 
     propertyValue = xNode.InnerText; 
     } 
    } 

    return propertyValue; 
} 
+0

danke viel amurra. – stazera

1

Sie können auch die Verpackung API verwenden:

using System.IO.Packaging.Package; 

[...] 

using (var package = Package.Open(path)) 
{ 
    package.PackageProperties.Creator = Environment.UserName; 
    package.PackageProperties.LastModifiedBy = Environment.UserName; 
} 

, die auch für andere Open XML-Formate wie Powerpoint funktioniert.

+0

gut! Ich habe für xlsx verwendet – elle0087

Verwandte Themen