Import an XML File into a Document Object Model
You can import an XML file into a Document Object Model (DOM) document node by using a
matlab.io.xml.dom.Parser object or the xmlread function.
The matlab.io.xml.dom.Parser class belongs to the MATLAB® API for XML Processing (MAXP). When you use a MAXP Parser
object to read an XML file, the resulting DOM document node is represented as a matlab.io.xml.dom.Document object. For a list of the classes that you can
use to work with a Document object, see matlab.io.xml.dom. You do not need Java® software to use MAXP classes.
To work with a DOM document node object created by xmlread, you
must use the Java API for XML Processing (JAXP). For a list of the JAXP methods and
properties, see the org.w3c.dom package description at https://docs.oracle.com/javase/7/docs/api.
The XML Document Object Model
In a Document Object Model, every item in an XML file corresponds to a node. The properties and methods that you use to create and access nodes, follow standards set by the World Wide Web consortium.
For example, consider this sample XML file:
<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>
The information in the file maps to the following types of DOM nodes:
Element nodes — Correspond to tag names. In the
info.xmlfile, these tags correspond to element nodes:productinfolistlistitemlabelcallbackicon
In this case, the
listelement is the parent oflistitemelement child nodes. Theproductinfoelement is the root element node.Text nodes — Contain values associated with element nodes. Every text node is the child of an element node. For example, the
Import Wizardtext node is the child of the firstlabelelement node.Attribute nodes — Contain name and value pairs associated with an element node. For example, in the first
labelelement node,coloris the name of an attribute andblueis its value. Attribute nodes are not parents or children of any nodes.Comment nodes — Include additional text in the file, in the form
<!--Sample comment-->.Document nodes — Correspond to the entire file. Use methods on the document node to create new element, text, attribute, or comment nodes.
Read an XML File Using the MAXP Parser
This example uses a matlab.io.xml.dom.Parser object to read an
info.xml file into a matlab.io.xml.dom.Document node. The file contains several
listitem elements. Each listitem
element contains a label and callback
element. The example uses MAXP methods to find the text content of the
callback element that corresponds to the
label that has text content Plot
Tools.
Read the file into a Document object.
infoFile = fullfile(matlabroot,'toolbox/matlab/general/info.xml'); infoLabel = 'Plot Tools'; infoCbk = ''; itemFound = false; import matlab.io.xml.dom.* xDoc = parseFile(Parser,infoFile);
Find all the listitem elements by calling the
getElementsByTagName method, which returns a matlab.io.xml.dom.NodeList object.
allListItems = getElementsByTagName(xDoc,'listitem');For each listitem element, compare the text of the
label element to Plot Tools. When
you locate the correct label, get the callback text. To
access an element in the NodeList object, use the
node method, which uses one-based indexing.
Alternatively, you can use the item method, which uses
zero-based indexing.
length = allListItems.Length; for i=1:length thisListItem = node(allListItems,i); childNode = getFirstChild(thisListItem); while ~isempty(childNode) %Filter out text, comments, and processing instructions. if isa(childNode,'matlab.io.xml.dom.Element') %Assume that each element has a single Text child childText = getData(getFirstChild(childNode)); switch getTagName(childNode) case 'label' itemFound = strcmp(childText,infoLabel); case 'callback' infoCbk = childText; end end childNode = getNextSibling(childNode); end if itemFound break else infoCbk = ''; end end
Display the result.
fprintf('Item "%s" has a callback of "%s".\n', infoLabel,infoCbk);Item "Plot Tools" has a callback of "figure; plottools".
Read an XML File Using xmlread
This example uses xmlread to read the
info.xml file into a DOM document node and Java API for XML Processing methods to find the text content of the
callback element that corresponds to the
label that has text content Plot
Tools.
infoFile = fullfile(matlabroot,'toolbox/matlab/general/info.xml'); infoLabel = 'Plot Tools'; infoCbk = ''; itemFound = false; xDoc = xmlread(infoFile); allListItems = getElementsByTagName(xDoc,'listitem'); %The item list index is zero-based. length = allListItems.getLength-1; for i=0:length thisListItem = item(allListItems,i); childNode = getFirstChild(thisListItem); while ~isempty(childNode) %Filter out text, comments, and processing instructions. if childNode.getNodeType == childNode.ELEMENT_NODE %Assume that each element has a single org.w3c.dom.Text child childText = char(childNode.getFirstChild.getData); switch char(childNode.getTagName) case 'label' itemFound = strcmp(childText,infoLabel); case 'callback' infoCbk = childText; end end childNode = getNextSibling(childNode); end if itemFound break else infoCbk = ''; end end fprintf('Item "%s" has a callback of "%s".\n', infoLabel,infoCbk);
Item "Plot Tools" has a callback of "figure; plottools".
See Also
matlab.io.xml.dom.Document | xmlread