Source for file XmlParser.php
Documentation is available at XmlParser.php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
* This file is part of the PEAR Console_CommandLine package.
* LICENSE: This source file is subject to the MIT license that is available
* through the world-wide-web at the following URI:
* http://opensource.org/licenses/mit-license.php
* @package Console_CommandLine
* @author David JEAN LOUIS <izimobil@gmail.com>
* @copyright 2007 David JEAN LOUIS
* @license http://opensource.org/licenses/mit-license.php MIT License
* @link http://pear.php.net/package/Console_CommandLine
* @since File available since release 0.1.0
require_once 'Console/CommandLine.php';
* Parser for command line xml definitions.
* @package Console_CommandLine
* @author David JEAN LOUIS <izimobil@gmail.com>
* @copyright 2007 David JEAN LOUIS
* @license http://opensource.org/licenses/mit-license.php MIT License
* @version Release: @package_version@
* @link http://pear.php.net/package/Console_CommandLine
* @since Class available since release 0.1.0
* Parses the given xml definition file and returns a
* Console_CommandLine instance constructed with the xml data.
* @param string $xmlfile The xml file to parse
* @return Console_CommandLine A parser instance
public static function parse($xmlfile)
E_USER_ERROR , array ('{$file}' => $xmlfile));
$doc = new DomDocument ();
$nodes = $doc->getElementsByTagName ('command');
return self ::_parseCommandNode ($root, true );
* Parses the given xml definition string and returns a
* Console_CommandLine instance constructed with the xml data.
* @param string $xmlstr The xml string to parse
* @return Console_CommandLine A parser instance
$doc = new DomDocument ();
$nodes = $doc->getElementsByTagName ('command');
return self ::_parseCommandNode ($root, true );
* Validates the xml definition using Relax NG.
* @param DomDocument $doc The document to validate
* @return boolean Whether the xml data is valid or not.
* @throws Console_CommandLine_Exception
if (is_dir('@data_dir@' . DIRECTORY_SEPARATOR . 'Console_CommandLine')) {
$rngfile = '@data_dir@' . DIRECTORY_SEPARATOR
. 'Console_CommandLine' . DIRECTORY_SEPARATOR . 'data'
. DIRECTORY_SEPARATOR . 'xmlschema.rng';
$rngfile = dirname(__FILE__ ) . DIRECTORY_SEPARATOR . '..'
. DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'data'
. DIRECTORY_SEPARATOR . 'xmlschema.rng';
E_USER_ERROR , array ('{$file}' => $rngfile));
return $doc->relaxNGValidate ($rngfile);
// _parseCommandNode() {{{
* Parses the root command node or a command node and returns the
* constructed Console_CommandLine or Console_CommandLine_Command instance.
* @param DomDocumentNode $node The node to parse
* @param bool $isRootNode Whether it is a root node or not
* @return mixed Console_CommandLine or Console_CommandLine_Command
private static function _parseCommandNode ($node, $isRootNode = false )
include_once 'Console/CommandLine/Command.php';
foreach ($node->childNodes as $cNode) {
$cNodeName = $cNode->nodeName;
$obj->$cNodeName = trim($cNode->nodeValue );
case 'add_version_option':
$obj->$cNodeName = self ::_bool (trim($cNode->nodeValue ));
$obj->addOption (self ::_parseOptionNode ($cNode));
$obj->addArgument (self ::_parseArgumentNode ($cNode));
$obj->addCommand (self ::_parseCommandNode ($cNode));
foreach ($cNode->childNodes as $subChildNode) {
if ($subChildNode->nodeName == 'alias') {
$obj->aliases [] = trim($subChildNode->nodeValue );
$obj->messages = self ::_messages ($cNode);
// _parseOptionNode() {{{
* Parses an option node and returns the constructed
* Console_CommandLine_Option instance.
* @param DomDocumentNode $node The node to parse
* @return Console_CommandLine_Option The built option
private static function _parseOptionNode ($node)
include_once 'Console/CommandLine/Option.php';
foreach ($node->childNodes as $cNode) {
$cNodeName = $cNode->nodeName;
foreach ($cNode->childNodes as $subChildNode) {
if ($subChildNode->nodeName == 'choice') {
$obj->choices [] = trim($subChildNode->nodeValue );
$obj->messages = self ::_messages ($cNode);
$obj->$cNodeName = trim($cNode->nodeValue );
if ($obj->action == 'Password') {
$obj->argument_optional = true;
// _parseArgumentNode() {{{
* Parses an argument node and returns the constructed
* Console_CommandLine_Argument instance.
* @param DomDocumentNode $node The node to parse
* @return Console_CommandLine_Argument The built argument
private static function _parseArgumentNode ($node)
include_once 'Console/CommandLine/Argument.php';
foreach ($node->childNodes as $cNode) {
$cNodeName = $cNode->nodeName;
$obj->$cNodeName = trim($cNode->nodeValue );
$obj->multiple = self ::_bool (trim($cNode->nodeValue ));
$obj->optional = self ::_bool (trim($cNode->nodeValue ));
foreach ($cNode->childNodes as $subChildNode) {
if ($subChildNode->nodeName == 'choice') {
$obj->choices [] = trim($subChildNode->nodeValue );
$obj->messages = self ::_messages ($cNode);
* Returns a boolean according to true/false possible strings.
* @param string $str The string to process
private static function _bool ($str)
* Returns an array of custom messages for the element
* @param DOMNode $node The messages node to process
* @return array an array of messages
* @see Console_CommandLine::$messages
* @see Console_CommandLine_Element::$messages
private static function _messages (DOMNode $node)
foreach ($node->childNodes as $cNode) {
if ($cNode->nodeType == XML_ELEMENT_NODE ) {
$name = $cNode->getAttribute ('name');
$value = trim($cNode->nodeValue );
$messages[$name] = $value;
Documentation generated on Mon, 11 Mar 2019 15:51:32 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.
|