* * * Output: * array( * 'string1' => 'value1', * 'string2' => 'value2', * 'string3' => 'value3' * ) */ function getValues($sXmlContent, $sXmlTagName, $sXmlAttrName = 'name') { $sXmlAttrName = strtoupper($sXmlAttrName); $aValues = $aIndexes = array(); $rParser = xml_parser_create("UTF-8"); xml_parse_into_struct($rParser, $sXmlContent, $aValues, $aIndexes); $sTag = strtoupper($sXmlTagName); $aTagIndexes = isset($aIndexes[$sTag]) ? $aIndexes[$sTag] : array(); $aReturnValues = array(); foreach($aTagIndexes as $iTagIndex) { if(!isset($aValues[$iTagIndex]['attributes'][$sXmlAttrName])) continue; $aReturnValues[$aValues[$iTagIndex]['attributes'][$sXmlAttrName]] = isset($aValues[$iTagIndex]['value']) ? $aValues[$iTagIndex]['value'] : NULL; } return $aReturnValues; } /** * Sets the values of tag where attribute "key" equals to specified. */ function setValues($sXmlContent, $sXmlTagName, $aKeyValues) { $aValues = $aIndexes = array(); $rParser = xml_parser_create("UTF-8"); xml_parse_into_struct($rParser, $sXmlContent, $aValues, $aIndexes); $aTagIndexes = $aIndexes[strtoupper($sXmlTagName)]; if(count($aTagIndexes) == 0) return $this->getContent(); foreach($aTagIndexes as $iTagIndex) foreach($aKeyValues as $sKey => $sValue) if($aValues[$iTagIndex]['attributes']['KEY'] == $sKey) { $aValues[$iTagIndex]['value'] = $sValue; break; } return $this->getContent($aValues); } /** * Adds given values to XML content. */ function addValues($sXmlContent, $sXmlTagName, $aKeyValues) { $aValues = $aIndexes = array(); $rParser = xml_parser_create("UTF-8"); xml_parse_into_struct($rParser, $sXmlContent, $aValues, $aIndexes); $aTagIndexes = $aIndexes[strtoupper($sXmlTagName)]; $iLastTagIndex = $aTagIndexes[count($aTagIndexes) - 1]; $iAddsCount = count($aKeyValues); $iLevel = $aValues[$iLastTagIndex]["level"]; for($i=count($aValues)-1; $i>$iLastTagIndex; $i--) $aValues[$i+$iAddsCount] = $aValues[$i]; $i = $iLastTagIndex; foreach($aKeyValues as $sKey => $sValue) { $i++; $aValues[$i] = Array("tag" => $sXmlTagName, "type" => "complete", "level" => $iLevel, "attributes" => Array("KEY" => $sKey), "value" => $sValue); } return $this->getContent($aValues); } /** * get content in XML format from given values array */ function getContent($aValues = array()) { $sContent = ""; foreach($aValues as $aValue) { $sTagName = strtolower($aValue['tag']); switch($aValue['type']) { case "open": $sContent .= "<" . $sTagName . ">"; break; case "complete": $sContent .= "<" . $sTagName; if(isset($aValue['attributes'])) foreach($aValue['attributes'] as $sAttrKey => $sAttrValue) $sContent .= " " . strtolower($sAttrKey) . "=\"" . $sAttrValue . "\""; $sContent .= isset($aValue['value']) ? ">" : " />"; break; case "close": $sContent .= ""; break; } } return $sContent; } } /** @} */