Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Importar documentos XML

Para leer un archivo XML del disco local o de una URL, utilice la función xmlread. xmlread devuelve el contenido del archivo en un nodo Document Object Model (DOM). Para obtener más información, consulte:

¿Qué es un Document Object Model (DOM) XML?

En un Document Object Model, cada elemento de un archivo XML corresponde a un nodo. Las propiedades y los métodos de los nodos DOM (es decir, la forma en que se crean los nodos y se accede a ellos) siguen las normas establecidas por el consorcio de la World Wide Web.

Por ejemplo, considere este archivo XML de muestra:

<productinfo>

<!-- This is a sample info.xml file. -->

<list>

<listitem>
<label color="blue">Import Wizard</label>
<callback>uiimport</callback>
<icon>ApplicationIcon.GENERIC_GUI</icon>
</listitem>

<listitem>
<label color="red">Profiler</label>
<callback>profile viewer</callback>
<icon>ApplicationIcon.PROFILER</icon>
</listitem>

</list>
</productinfo>

La información del archivo se aplica a los siguientes tipos de nodos en un DOM:

  • Nodos de elemento: corresponden a los nombres de las etiquetas. En el archivo info.xml de muestra, estas etiquetas corresponden a los nodos de elemento:

    • productinfo

    • list

    • listitem

    • label

    • callback

    • icon

    En este caso, el elemento list es el nodo principal de los nodos secundarios de elemento listitem. El elemento productinfo es el nodo de elemento raíz.

  • Nodos de texto: contienen valores asociados a los nodos de elemento. Cada nodo de texto es el nodo secundario de un nodo de elemento. Por ejemplo, el nodo de texto Import Wizard es el nodo secundario del primer nodo de elemento label.

  • Nodos de atributo: contienen pares nombre-valor asociados a un nodo de elemento. Por ejemplo, en el primer nodo de elemento label, color es el nombre de un atributo y blue es su valor. Los nodos de atributo no son nodos ni principales ni secundarios de otros nodos.

  • Nodos de comentario: incluyen texto adicional en el archivo, en el formato <!--Sample comment-->.

  • Nodos de documento: corresponden al archivo completo. Utilice métodos en el nodo de documento para crear nuevos nodos de elemento, texto, atributo o comentario.

Para obtener una lista completa de los métodos y las propiedades de los nodos DOM, consulte la descripción del paquete org.w3c.dom en https://docs.oracle.com/javase/7/docs/api.

Ejemplo: encontrar texto en un archivo XML

El archivo matlabroot/toolbox/matlab/general/info.xml completo contiene varios elementos listitem, como:

<listitem>
<label>Import Wizard</label>
<callback>uiimport</callback>
<icon>ApplicationIcon.GENERIC_GUI</icon>
</listitem>

Uno de los elementos label tiene el texto secundario Plot Tools. Suponga que desea encontrar el texto del elemento callback en el mismo listitem. Siga estos pasos:

  1. Inicie las variables y llame a xmlread para obtener el nodo de documento:

    findLabel = 'Plot Tools';
    findCbk = '';
    
    xDoc = xmlread(fullfile(matlabroot, ...
                   'toolbox','matlab','general','info.xml'));
  2. Encuentre todos los elementos listitem. El método getElementsByTagName devuelve una lista detallada que contiene información sobre los nodos secundarios:

    allListitems = xDoc.getElementsByTagName('listitem');

    Nota

    Las listas devueltas por los métodos DOM utilizan una indexación de base cero.

  3. Para cada listitem, compare el texto del elemento label con el texto que desee encontrar. Cuando localice la label correcta, obtenga el texto callback:

    for k = 0:allListitems.getLength-1
       thisListitem = allListitems.item(k);
       
       % Get the label element. In this file, each
       % listitem contains only one label.
       thisList = thisListitem.getElementsByTagName('label');
       thisElement = thisList.item(0);
    
       % Check whether this is the label you want.
       % The text is in the first child node.
       if strcmp(thisElement.getFirstChild.getData, findLabel)
           thisList = thisListitem.getElementsByTagName('callback');
           thisElement = thisList.item(0);
           findCbk = char(thisElement.getFirstChild.getData);
           break;
       end
       
    end
  4. Muestre los resultados finales:

    if ~isempty(findCbk)
        msg = sprintf('Item "%s" has a callback of "%s."',...
                      findLabel, findCbk);
    else
        msg = sprintf('Did not find the "%s" item.', findLabel);
    end
    disp(msg);

Para conocer otro ejemplo en el que se crea un arreglo de estructura para almacenar datos de un archivo XML, consulte la página de referencia de la función xmlread.