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.xml
file, these tags correspond to element nodes:productinfo
list
listitem
label
callback
icon
In this case, the
list
element is the parent oflistitem
element child nodes. Theproductinfo
element 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 Wizard
text node is the child of the firstlabel
element node.Attribute nodes — Contain name and value pairs associated with an element node. For example, in the first
label
element node,color
is the name of an attribute andblue
is 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