Heim  >  Artikel  >  Web-Frontend  >  Teilen von PHP-Analysetools für Daten im XML-Format

Teilen von PHP-Analysetools für Daten im XML-Format

小云云
小云云Original
2018-01-09 09:41:221477Durchsuche

In diesem Artikel wird hauptsächlich die PHP-Analyse-Tool-Klasse für XML-Format-Daten vorgestellt, die PHP-bezogene Betriebsfähigkeiten zum Hinzufügen, Abrufen und Parsen von XML-Format-Datenknoten beinhaltet. Ich hoffe, dass sie allen helfen kann.

Dieser Artikel beschreibt das Beispiel einer PHP-Analysetoolklasse für Daten im XML-Format. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:


class ome_xml {
  /**
  * xml资源
  *
  * @var    resource
  * @see    xml_parser_create()
  */
  public $parser;
  /**
  * 资源编码
  *
  * @var    string
  */
  public $srcenc;
  /**
  * target encoding
  *
  * @var    string
  */
  public $dstenc;
  /**
  * the original struct
  *
  * @access  private
  * @var    array
  */
  public $_struct = array();
  /**
  * Constructor
  *
  * @access    public
  * @param    mixed    [$srcenc] source encoding
  * @param    mixed    [$dstenc] target encoding
  * @return    void
  * @since
  */
  function SofeeXmlParser($srcenc = null, $dstenc = null) {
    $this->srcenc = $srcenc;
    $this->dstenc = $dstenc;
    // initialize the variable.
    $this->parser = null;
    $this->_struct = array();
  }
  /**
  * Parses the XML file
  *
  * @access    public
  * @param    string    [$file] the XML file name
  * @return    void
  * @since
  */
  function xml2array($file) {
    //$this->SofeeXmlParser('utf-8');
  $data = file_get_contents($file);
    $this->parseString($data);
    return $this->getTree();
  }
  function xml3array($file){
  $data = file_get_contents($file);
  $this->parseString($data);
  return $this->_struct;
  }
  /**
  * Parses a string.
  *
  * @access    public
  * @param    string    data XML data
  * @return    void
  */
  function parseString($data) {
    if ($this->srcenc === null) {
      $this->parser = xml_parser_create();
    } else {
      if($this->parser = xml_parser_create($this->srcenc)) {
        return 'Unable to create XML parser resource with '. $this->srcenc .' encoding.';
      }
    }
    if ($this->dstenc !== null) {
      @xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $this->dstenc) or die('Invalid target encoding');
    }
    xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);  // lowercase tags
    xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1);    // skip empty tags
    if (!xml_parse_into_struct($this->parser, $data, $this->_struct)) {
      /*printf("XML error: %s at line %d",
          xml_error_string(xml_get_error_code($this->parser)),
          xml_get_current_line_number($this->parser)
      );*/
      $this->free();
      return false;
    }
    $this->_count = count($this->_struct);
    $this->free();
  }
  /**
  * return the data struction
  *
  * @access    public
  * @return    array
  */
  function getTree() {
    $i = 0;
    $tree = array();
    $tree = $this->addNode(
      $tree,
      $this->_struct[$i]['tag'],
      (isset($this->_struct[$i]['value'])) ? $this->_struct[$i]['value'] : '',
      (isset($this->_struct[$i]['attributes'])) ? $this->_struct[$i]['attributes'] : '',
      $this->getChild($i)
    );
    unset($this->_struct);
    return $tree;
  }
  /**
  * recursion the children node data
  *
  * @access    public
  * @param    integer    [$i] the last struct index
  * @return    array
  */
  function getChild(&$i) {
    // contain node data
    $children = array();
    // loop
    while (++$i < $this->_count) {
      // node tag name
      $tagname = $this->_struct[$i][&#39;tag&#39;];
      $value = isset($this->_struct[$i][&#39;value&#39;]) ? $this->_struct[$i][&#39;value&#39;] : &#39;&#39;;
      $attributes = isset($this->_struct[$i][&#39;attributes&#39;]) ? $this->_struct[$i][&#39;attributes&#39;] : &#39;&#39;;
      switch ($this->_struct[$i][&#39;type&#39;]) {
        case &#39;open&#39;:
          // node has more children
          $child = $this->getChild($i);
          // append the children data to the current node
          $children = $this->addNode($children, $tagname, $value, $attributes, $child);
          break;
        case &#39;complete&#39;:
          // at end of current branch
          $children = $this->addNode($children, $tagname, $value, $attributes);
          break;
        case &#39;cdata&#39;:
          // node has CDATA after one of it&#39;s children
          $children[&#39;value&#39;] .= $value;
          break;
        case &#39;close&#39;:
          // end of node, return collected data
          return $children;
          break;
      }
    }
    //return $children;
  }
  /**
  * Appends some values to an array
  *
  * @access    public
  * @param    array    [$target]
  * @param    string    [$key]
  * @param    string    [$value]
  * @param    array    [$attributes]
  * @param    array    [$inner] the children
  * @return    void
  * @since
  */
  function addNode($target, $key, $value = &#39;&#39;, $attributes = &#39;&#39;, $child = &#39;&#39;) {
    if (!isset($target[$key][&#39;value&#39;]) && !isset($target[$key][0])) {
      if ($child != &#39;&#39;) {
        $target[$key] = $child;
      }
      if ($attributes != &#39;&#39;) {
        foreach ($attributes as $k => $v) {
          $target[$key][$k] = $v;
        }
      }
      $target[$key][&#39;value&#39;] = $value;
    } else {
      if (!isset($target[$key][0])) {
        // is string or other
        $oldvalue = $target[$key];
        $target[$key] = array();
        $target[$key][0] = $oldvalue;
        $index = 1;
      } else {
        // is array
        $index = count($target[$key]);
      }
      if ($child != &#39;&#39;) {
        $target[$key][$index] = $child;
      }
      if ($attributes != &#39;&#39;) {
        foreach ($attributes as $k => $v) {
          $target[$key][$index][$k] = $v;
        }
      }
      $target[$key][$index][&#39;value&#39;] = $value;
    }
    return $target;
  }
  /**
  * Free the resources
  *
  * @access    public
  * @return    void
  **/
  function free() {
    if (isset($this->parser) && is_resource($this->parser)) {
      xml_parser_free($this->parser);
      unset($this->parser);
    }
  }

Verwandte Empfehlungen:

Ausführliche Erklärung von Ergänzungen, Löschungen und Änderungen an XML-Dateien in PHP prüfen

PHP zur Implementierung von Ausgabe-XML-Attributen

Java konvertiert XML-Dokumente in Daten im JSON-Format

Das obige ist der detaillierte Inhalt vonTeilen von PHP-Analysetools für Daten im XML-Format. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn