*
*
* 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']) ? ">" . $sTagName . ">" : " />";
break;
case "close":
$sContent .= "" . $sTagName . ">";
break;
}
}
return $sContent;
}
}
/** @} */