Cómo: Agregar elementos XML personalizados a documentos sin iniciar Microsoft Office
Actualización: noviembre 2007
Se aplica a |
---|
La información de este tema sólo se aplica a las versiones de Microsoft Office especificadas. Versión de Microsoft Office
Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto. |
Puede agregar un elemento XML personalizado a un documento sin iniciar Microsoft Office Excel, Microsoft Office PowerPoint o Microsoft Office Word. Esto resulta útil si desea almacenar datos XML en un documento ubicado en un equipo que no tiene instalado Microsoft Office, por ejemplo, en un servidor. Para obtener más información, vea Información general sobre los elementos XML personalizados.
El documento debe estar en uno de los formatos XML abiertos, como .docx, .xlsx o .pptx. No se puede obtener acceso a los elementos XML personalizados en formatos de archivo binario sin iniciar la aplicación de Microsoft Office.
Para agregar un elemento XML personalizado sin iniciar Microsoft Office, use las clases Package y PackagePart. Para obtener más información sobre estas clases, vea Documentos en Windows Presentation Foundation.
Para agregar un elemento XML personalizado a un documento sin iniciar Microsoft Office
Cree un objeto XmlDocument que represente el XML que desea agregar a un elemento XML personalizado.
Dim xmlString As String = _ "<?xml version=""1.0"" encoding=""utf-8"" ?>" & _ "<employees https://schemas.microsoft.com/vsto/samples"">" & _ "<employee>" & _ "<name>Karina Leal</name>" & _ "<hireDate>1999-04-01</hireDate>" & _ "<title>Manager</title>" & _ "</employee>" & _ "</employees>" Dim reader As StringReader = New StringReader(xmlString) Dim xmlDoc As XmlDocument = New XmlDocument() xmlDoc.Load(reader)
string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + "<employees xmlns=\"https://schemas.microsoft.com/vsto/samples\">" + "<employee>" + "<name>Karina Leal</name>" + "<hireDate>1999-04-01</hireDate>" + "<title>Manager</title>" + "</employee>" + "</employees>"; StringReader reader = new StringReader(xmlString); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(reader);
Cree una nueva clase PackagePart que represente el elemento XML personalizado que agrega al documento. A continuación, guarde el XML del objeto XmlDocument que creó anteriormente en el nuevo elemento XML personalizado.
Using package As Package = package.Open(fullDocumentPath, FileMode.Open, _ FileAccess.ReadWrite) Dim uriPartTarget As Uri = New Uri("/customXml/employee1.xml", UriKind.Relative) If Not package.PartExists(uriPartTarget) Then Dim customXml As PackagePart = package.CreatePart(uriPartTarget, _ "application/vnd.openxmlformats-officedocument.customXmlProperties+xml") Using partStream As Stream = customXml.GetStream(FileMode.Create, _ FileAccess.ReadWrite) xmlDoc.Save(partStream) End Using End If End Using
using (Package package = Package.Open(fullDocumentPath, FileMode.Open, FileAccess.ReadWrite)) { Uri uriPartTarget = new Uri("/customXml/employee1.xml", UriKind.Relative); if (!package.PartExists(uriPartTarget)) { PackagePart customXml = package.CreatePart(uriPartTarget, "application/vnd.openxmlformats-officedocument.customXmlProperties+xml"); using (Stream partStream = customXml.GetStream(FileMode.Create, FileAccess.ReadWrite)) { xmlDoc.Save(partStream); } } }
Ejemplo
En el ejemplo de código siguiente se agrega un elemento XML personalizado a un documento de Word denominado Employees.docx que está ubicado en la carpeta %UserProfile%\Mis documentos (para Windows XP y versiones anteriores) o en la carpeta %UserProfile%\Documentos (para Windows Vista).
Este ejemplo está pensado para usarlo en una aplicación de consola, pero puede modificarlo para que se pueda usar en cualquier aplicación que funcione con .NET Framework 3.0 o posterior, como una aplicación de Windows Presentation Foundation (WPF).
Para modificar este ejemplo de modo que funcione con un documento de Excel o de PowerPoint, modifique el método Main para pasar la ruta de acceso completa del documento al método AddCustomXmlPart.
Sub Main()
AddCustomXmlPart(Environment.GetFolderPath( _
Environment.SpecialFolder.MyDocuments) & "\Employees.docx")
End Sub
Private Sub AddCustomXmlPart(ByVal fullDocumentPath As String)
Dim xmlDoc As XmlDocument = GetXmlDocumentFromString()
If xmlDoc IsNot Nothing Then
Using package As Package = package.Open(fullDocumentPath, FileMode.Open, _
FileAccess.ReadWrite)
Dim uriPartTarget As Uri = New Uri("/customXml/employee1.xml", UriKind.Relative)
If Not package.PartExists(uriPartTarget) Then
Dim customXml As PackagePart = package.CreatePart(uriPartTarget, _
"application/vnd.openxmlformats-officedocument.customXmlProperties+xml")
Using partStream As Stream = customXml.GetStream(FileMode.Create, _
FileAccess.ReadWrite)
xmlDoc.Save(partStream)
End Using
End If
End Using
End If
End Sub
Private Function GetXmlDocumentFromString() As XmlDocument
Dim xmlString As String = _
"<?xml version=""1.0"" encoding=""utf-8"" ?>" & _
"<employees https://schemas.microsoft.com/vsto/samples"">" & _
"<employee>" & _
"<name>Karina Leal</name>" & _
"<hireDate>1999-04-01</hireDate>" & _
"<title>Manager</title>" & _
"</employee>" & _
"</employees>"
Dim reader As StringReader = New StringReader(xmlString)
Dim xmlDoc As XmlDocument = New XmlDocument()
xmlDoc.Load(reader)
Return xmlDoc
End Function
static void Main(string[] args)
{
AddCustomXmlPart(Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments) + @"\Employees.docx");
}
private static void AddCustomXmlPart(string fullDocumentPath)
{
XmlDocument xmlDoc = GetXmlDocumentFromString();
if (xmlDoc != null)
{
using (Package package = Package.Open(fullDocumentPath, FileMode.Open,
FileAccess.ReadWrite))
{
Uri uriPartTarget = new Uri("/customXml/employee1.xml", UriKind.Relative);
if (!package.PartExists(uriPartTarget))
{
PackagePart customXml = package.CreatePart(uriPartTarget,
"application/vnd.openxmlformats-officedocument.customXmlProperties+xml");
using (Stream partStream = customXml.GetStream(FileMode.Create,
FileAccess.ReadWrite))
{
xmlDoc.Save(partStream);
}
}
}
}
}
private static XmlDocument GetXmlDocumentFromString()
{
string xmlString =
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
"<employees xmlns=\"https://schemas.microsoft.com/vsto/samples\">" +
"<employee>" +
"<name>Karina Leal</name>" +
"<hireDate>1999-04-01</hireDate>" +
"<title>Manager</title>" +
"</employee>" +
"</employees>";
StringReader reader = new StringReader(xmlString);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
return xmlDoc;
}
Compilar el código
En este ejemplo se necesita una referencia al ensamblado WindowsBase.dll. Este ensamblado está incluido en .NET Framework, a partir de la versión 3.0.
En este ejemplo se presupone que tiene instrucciones using (para C#) o Imports (para Visual Basic) para los siguientes espacios de nombres:
System.IO
System.IO.Packaging
System.Xml
Vea también
Tareas
Cómo: Agregar elementos XML personalizados a personalizaciones de nivel de documento
Cómo: Agregar elementos XML personalizados a documentos mediante complementos de nivel de aplicación