Как программно получить доступ к встроенным свойствам открытого файла XML WordDoc - PullRequest
4 голосов
/ 14 декабря 2010

Я хотел бы получить доступ к некоторым встроенным свойствам (таким как автор, дата последнего изменения и т. Д.) Открытого файла документа xml word. Я хотел бы использовать Open XML SDK2.0 для этой цели. поэтому мне интересно, есть ли какой-либо класс или каким-либо образом я мог бы программно получить доступ к этим встроенным свойствам.

Ответы [ 2 ]

8 голосов
/ 14 декабря 2010

Объяснение следующего метода можно найти здесь , но в значительной степени вам нужно передать свойства, которые вы хотите получить из файла core.xml, этому методу, и он вернет значение:

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;
}
2 голосов
/ 20 июля 2016

Вы также можете использовать API упаковки:

using System.IO.Packaging.Package;

[...]

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

Это работает и для других открытых форматов XML, таких как power point.

...