📄 simple.html
字号:
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>XML::Simple - Easy API to maintain XML</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>
<body>
<script>writelinks('__top__',2);</script>
<h1><a>XML::Simple - Easy API to maintain XML</a></h1>
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<ul>
<li><a href="#name">NAME</a></li>
<li><a href="#synopsis">SYNOPSIS</a></li>
<li><a href="#quick_start">QUICK START</a></li>
<li><a href="#description">DESCRIPTION</a></li>
<ul>
<li><a href="#xmlin__"><code>XMLin()</code></a></li>
<li><a href="#xmlout__"><code>XMLout()</code></a></li>
<li><a href="#caveats">Caveats</a></li>
</ul>
<li><a href="#options">OPTIONS</a></li>
<ul>
<li><a href="#attrindent____1___out__handy">AttrIndent => 1 <em># out - handy</em></a></li>
<li><a href="#cache______cache_schemes_____in__advanced">Cache => [ cache schemes ] <em># in - advanced</em></a></li>
<li><a href="#contentkey_____keyname____in_out__seldom_used">ContentKey => 'keyname' <em># in+out - seldom used</em></a></li>
<li><a href="#datahandler____code_ref___in__sax_only">DataHandler => code_ref <em># in - SAX only</em></a></li>
<li><a href="#forcearray____1___in__important">ForceArray => 1 <em># in - important</em></a></li>
<li><a href="#forcearray______names_____in__important">ForceArray => [ names ] <em># in - important</em></a></li>
<li><a href="#forcecontent____1___in__seldom_used">ForceContent => 1 <em># in - seldom used</em></a></li>
<li><a href="#grouptags______grouping_tag____grouped_tag_____in_out__handy">GroupTags => { grouping tag => grouped tag } <em># in+out - handy</em></a></li>
<li><a href="#handler____object_ref___out__sax_only">Handler => object_ref <em># out - SAX only</em></a></li>
<li><a href="#keeproot____1___in_out__handy">KeepRoot => 1 <em># in+out - handy</em></a></li>
<li><a href="#keyattr______list_____in_out__important">KeyAttr => [ list ] <em># in+out - important</em></a></li>
<li><a href="#keyattr______list_____in_out__important">KeyAttr => { list } <em># in+out - important</em></a></li>
<li><a href="#noattr____1___in_out__handy">NoAttr => 1 <em># in+out - handy</em></a></li>
<li><a href="#noescape____1___out__seldom_used">NoEscape => 1 <em># out - seldom used</em></a></li>
<li><a href="#noindent____1___out__seldom_used">NoIndent => 1 <em># out - seldom used</em></a></li>
<li><a href="#nosort____1___out__seldom_used">NoSort => 1 <em># out - seldom used</em></a></li>
<li><a href="#normalisespace____0___1___2___in__handy">NormaliseSpace => 0 | 1 | 2 <em># in - handy</em></a></li>
<li><a href="#nsexpand____1___in_out_handy__sax_only">NSExpand => 1 <em># in+out handy - SAX only</em></a></li>
<li><a href="#numericescape____0___1___2___out__handy">NumericEscape => 0 | 1 | 2 <em># out - handy</em></a></li>
<li><a href="#outputfile_____file_specifier____out__handy">OutputFile => <file specifier> <em># out - handy</em></a></li>
<li><a href="#parseropts______xml__parser_options_____in__don_t_use_this">ParserOpts => [ XML::Parser Options ] <em># in - don't use this</em></a></li>
<li><a href="#rootname_____string____out__handy">RootName => 'string' <em># out - handy</em></a></li>
<li><a href="#searchpath______list_____in__handy">SearchPath => [ list ] <em># in - handy</em></a></li>
<li><a href="#suppressempty____1________undef___in_out__handy">SuppressEmpty => 1 | '' | undef <em># in+out - handy</em></a></li>
<li><a href="#valueattr______names_____in__handy">ValueAttr => [ names ] <em># in - handy</em></a></li>
<li><a href="#valueattr______element____attribute__________in_out__handy">ValueAttr => { element => attribute, ... } <em># in+out - handy</em></a></li>
<li><a href="#variables______name____value_____in__handy">Variables => { name => value } <em># in - handy</em></a></li>
<li><a href="#varattr_____attr_name____in__handy">VarAttr => 'attr_name' <em># in - handy</em></a></li>
<li><a href="#xmldecl____1_or_xmldecl_____string____out__handy">XMLDecl => 1 or XMLDecl => 'string' <em># out - handy</em></a></li>
</ul>
<li><a href="#optional_oo_interface">OPTIONAL OO INTERFACE</a></li>
<li><a href="#strict_mode">STRICT MODE</a></li>
<li><a href="#sax_support">SAX SUPPORT</a></li>
<li><a href="#environment">ENVIRONMENT</a></li>
<li><a href="#error_handling">ERROR HANDLING</a></li>
<li><a href="#examples">EXAMPLES</a></li>
<li><a href="#where_to_from_here">WHERE TO FROM HERE?</a></li>
<li><a href="#see_also">SEE ALSO</a></li>
<li><a href="#copyright">COPYRIGHT</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>XML::Simple - Easy API to maintain XML (esp config files)</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
<span class="keyword">use</span> <span class="variable">XML::Simple</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$ref</span> <span class="operator">=</span> <span class="variable">XMLin</span><span class="operator">(</span><span class="operator">[</span><span class="operator"><</span><span class="variable">xml</span> <span class="variable">file</span> <span class="keyword">or</span> <span class="variable">string</span><span class="operator">></span><span class="operator">]</span> <span class="operator">[</span><span class="operator">,</span> <span class="operator"><</span><span class="variable">options</span><span class="operator">></span><span class="operator">]</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$xml</span> <span class="operator">=</span> <span class="variable">XMLout</span><span class="operator">(</span><span class="variable">$hashref</span> <span class="operator">[</span><span class="operator">,</span> <span class="operator"><</span><span class="variable">options</span><span class="operator">></span><span class="operator">]</span><span class="operator">);</span>
</pre>
<p>Or the object oriented way:</p>
<pre>
<span class="keyword">require</span> <span class="variable">XML::Simple</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$xs</span> <span class="operator">=</span> <span class="variable">XML::Simple</span><span class="operator">-></span><span class="variable">new</span><span class="operator">(</span><span class="variable">options</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$ref</span> <span class="operator">=</span> <span class="variable">$xs</span><span class="operator">-></span><span class="variable">XMLin</span><span class="operator">(</span><span class="operator">[</span><span class="operator"><</span><span class="variable">xml</span> <span class="variable">file</span> <span class="keyword">or</span> <span class="variable">string</span><span class="operator">></span><span class="operator">]</span> <span class="operator">[</span><span class="operator">,</span> <span class="operator"><</span><span class="variable">options</span><span class="operator">></span><span class="operator">]</span><span class="operator">);</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$xml</span> <span class="operator">=</span> <span class="variable">$xs</span><span class="operator">-></span><span class="variable">XMLout</span><span class="operator">(</span><span class="variable">$hashref</span> <span class="operator">[</span><span class="operator">,</span> <span class="operator"><</span><span class="variable">options</span><span class="operator">></span><span class="operator">]</span><span class="operator">);</span>
</pre>
<p>(or see <a href="#sax_support">SAX SUPPORT</a> for 'the SAX way').</p>
<p>To catch common errors:</p>
<pre>
<span class="keyword">use</span> <span class="variable">XML::Simple</span> <span class="string">qw(:strict)</span><span class="operator">;</span>
</pre>
<p>(see <a href="#strict_mode">STRICT MODE</a> for more details).</p>
<p>
</p>
<hr />
<h1><a name="quick_start">QUICK START</a></h1>
<p>Say you have a script called <strong>foo</strong> and a file of configuration options
called <strong>foo.xml</strong> containing this:</p>
<pre>
<config logdir="/var/log/foo/" debugfile="/tmp/foo.debug">
<server name="sahara" osname="solaris" osversion="2.6">
<address>10.0.0.101</address>
<address>10.0.1.101</address>
</server>
<server name="gobi" osname="irix" osversion="6.5">
<address>10.0.0.102</address>
</server>
<server name="kalahari" osname="linux" osversion="2.0.34">
<address>10.0.0.103</address>
<address>10.0.1.103</address>
</server>
</config></pre>
<p>The following lines of code in <strong>foo</strong>:</p>
<pre>
<span class="keyword">use</span> <span class="variable">XML::Simple</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">my</span> <span class="variable">$config</span> <span class="operator">=</span> <span class="variable">XMLin</span><span class="operator">();</span>
</pre>
<p>will 'slurp' the configuration options into the hashref $config (because no
arguments are passed to <code>XMLin()</code> the name and location of the XML file will
be inferred from name and location of the script). You can dump out the
contents of the hashref using Data::Dumper:</p>
<pre>
<span class="keyword">use</span> <span class="variable">Data::Dumper</span><span class="operator">;</span>
</pre>
<pre>
<span class="keyword">print</span> <span class="variable">Dumper</span><span class="operator">(</span><span class="variable">$config</span><span class="operator">);</span>
</pre>
<p>which will produce something like this (formatting has been adjusted for
brevity):</p>
<pre>
<span class="operator">{</span>
<span class="string">'logdir'</span> <span class="operator">=></span> <span class="string">'/var/log/foo/'</span><span class="operator">,</span>
<span class="string">'debugfile'</span> <span class="operator">=></span> <span class="string">'/tmp/foo.debug'</span><span class="operator">,</span>
<span class="string">'server'</span> <span class="operator">=></span> <span class="operator">{</span>
<span class="string">'sahara'</span> <span class="operator">=></span> <span class="operator">{</span>
<span class="string">'osversion'</span> <span class="operator">=></span> <span class="string">'2.6'</span><span class="operator">,</span>
<span class="string">'osname'</span> <span class="operator">=></span> <span class="string">'solaris'</span><span class="operator">,</span>
<span class="string">'address'</span> <span class="operator">=></span> <span class="operator">[</span> <span class="string">'10.0.0.101'</span><span class="operator">,</span> <span class="string">'10.0.1.101'</span> <span class="operator">]</span>
<span class="operator">}</span><span class="operator">,</span>
<span class="string">'gobi'</span> <span class="operator">=></span> <span class="operator">{</span>
<span class="string">'osversion'</span> <span class="operator">=></span> <span class="string">'6.5'</span><span class="operator">,</span>
<span class="string">'osname'</span> <span class="operator">=></span> <span class="string">'irix'</span><span class="operator">,</span>
<span class="string">'address'</span> <span class="operator">=></span> <span class="string">'10.0.0.102'</span>
<span class="operator">}</span><span class="operator">,</span>
<span class="string">'kalahari'</span> <span class="operator">=></span> <span class="operator">{</span>
<span class="string">'osversion'</span> <span class="operator">=></span> <span class="string">'2.0.34'</span><span class="operator">,</span>
<span class="string">'osname'</span> <span class="operator">=></span> <span class="string">'linux'</span><span class="operator">,</span>
<span class="string">'address'</span> <span class="operator">=></span> <span class="operator">[</span> <span class="string">'10.0.0.103'</span><span class="operator">,</span> <span class="string">'10.0.1.103'</span> <span class="operator">]</span>
<span class="operator">}</span>
<span class="operator">}</span>
<span class="operator">}</span>
</pre>
<p>Your script could then access the name of the log directory like this:</p>
<pre>
<span class="keyword">print</span> <span class="variable">$config</span><span class="operator">-></span><span class="operator">{</span><span class="string">logdir</span><span class="operator">}</span><span class="operator">;</span>
</pre>
<p>similarly, the second address on the server 'kalahari' could be referenced as:</p>
<pre>
<span class="keyword">print</span> <span class="variable">$config</span><span class="operator">-></span><span class="operator">{</span><span class="string">server</span><span class="operator">}</span><span class="operator">-></span><span class="operator">{</span><span class="string">kalahari</span><span class="operator">}</span><span class="operator">-></span><span class="operator">{</span><span class="string">address</span><span class="operator">}</span><span class="operator">-></span><span class="operator">[</span><span class="number">1</span><span class="operator">]</span><span class="operator">;</span>
</pre>
<p>What could be simpler? (Rhetorical).</p>
<p>For simple requirements, that's really all there is to it. If you want to
store your XML in a different directory or file, or pass it in as a string or
even pass it in via some derivative of an IO::Handle, you'll need to check out
<a href="#options">OPTIONS</a>. If you want to turn off or tweak the array folding feature (that
neat little transformation that produced $config->{server}) you'll find options
for that as well.</p>
<p>If you want to generate XML (for example to write a modified version of
$config back out as XML), check out <code>XMLout()</code>.</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -