| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- <?php
- Lib::loadClass('RouteBase');
- Lib::loadClass('XML');
- // @see Route_Test_XslRecurse for example use of php function inside xsl
- // - TODO: input file should have another extension, it is not correct dita file, it has tags RelatedFeature
- // IDEA: make object (DitaRelatedFeatureParser) with state to parse input file (dita RelatedFeature tmpl)
- // - at the beginning od tag RelatedFeature run php function to set current xpath in Parse object
- // - at the end od tag RelatedFeature run php function to unset current xpath in Parse object (go up in doc tree)
- class Route_Test_ConvertDitaRelatedFeature extends RouteBase {
- function defaultAction() {
- UI::layout( [ $this, 'defaultView' ], [ 'showMenu' => false ] );
- }
- function defaultView() {
- $inputPath = APP_PATH_ROOT . DS . 'schema/ant-url_action/default_db.in7_dziennik_koresp/test-druk/IN7_DZIENNIK_KORESP.dita'; // TODO: it is not correct dita file - has tags RelatedFeature
- $inputBody = file_get_contents($inputPath);
- DBG::nicePrint(htmlspecialchars($inputBody), "input");
- DBG::nicePrint(null, "memory_get_usage: " . round(memory_get_usage() / 1024) . " KB");
- $inputXmlArray = XML::readXmlFileToArray($inputPath); // tag
- // tag => [ 0 => tagName, 1 => attributes, 2 => childrens ]
- // tagName string
- // attributes => [ name => value ]
- // childrens => [ childTag, ... ]
- // childTag => tag | string
- DBG::nicePrint($inputXmlArray, "inputXmlArray");
- DBG::nicePrint(null, "memory_get_usage: " . round(memory_get_usage() / 1024) . " KB");
- { // find all RelatedFeature recurse
- $rootTag = $inputXmlArray;
- $relTagsReader = new RelatedFeatureTagReader($rootTag);
- $allRelatedFeature = $relTagsReader->findRelatedFeatureRecurse($rootTag);
- DBG::nicePrint($allRelatedFeature, "allRelatedFeature");
- DBG::nicePrint(null, "memory_get_usage: " . round(memory_get_usage() / 1024) . " KB");
- $ogcSelectFields = $relTagsReader->findRelatedFeatureRecurse($rootTag);
- DBG::nicePrint($allRelatedFeature, "allRelatedFeature");
- DBG::nicePrint(null, "memory_get_usage: " . round(memory_get_usage() / 1024) . " KB");
- }
- DBG::nicePrint(null, "memory_get_usage: " . round(memory_get_usage() / 1024) . " KB");
- die('.EOF');
- }
- }
- class RelatedFeatureTagReader {
- function __construct() {
- $this->_parsedTags = [];
- }
- function findRelatedFeatureRecurse($tag, $parentTagId = 0, $parsedTags = []) {
- if (!is_array($tag)) return $parsedTags; // string
- DBG::nicePrint([ 'tag' => $tag[0], 'attrs' => $tag[1], '$parsedTags' => $parsedTags ], "findRelatedFeatureRecurse({$tag[0]})");
- if (empty($tag)) return [];
- if ('RelatedFeature' === $tag[0]) {
- $parsedTags[] = [ 'tag' => $tag[0], 'attrs' => $tag[1], 'parentTagId' => $parentTagId ];
- $parentTagId = count($parsedTags) - 1;
- }
- else if (!empty($tag[1]['xpath'])) $parsedTags[] = [ 'tag' => $tag[0], 'attrs' => $tag[1], 'parentTagId' => $parentTagId ];
- if (empty($tag[2])) return $parsedTags;
- return array_reduce($tag[2], function ($ret, $childTag) use ($parentTagId) {
- return $this->findRelatedFeatureRecurse($childTag, $parentTagId, $ret);
- }, $parsedTags);
- }
- }
|