Här har du en funktion som kan ta fram alla olika slags taggar med alla de atribut du vill. Du måste dock ändra i funktionen vad du vill byta ut de olika sakerna mot. Men jag har skrivit så du lätt ska hitta och förstå. Här kommer den ( dock lite sparsamt betatestad men ändå)
<?php
$xml = "Jag är en ninja som går på stan. Det är rätt cooolt <br /><specialtag type=\"news\" amount=\"5\" />";
$xml = check_tag("<specialtag","/>",$xml,"type=,amount=");
print_r($xml);
###############################################################################################
### funcktion för att ta fram en array över alla tagar av en viss typ, med alla dess attribut.
### attributen anges som fjräde parameter så här src=,type=,amount=
### altså bara attirbut namnet följt av ett likhetstecken och åtsklijda av komman.
##############################################################################################
function check_tag($start_tag,$end_tag,$string,$attr_list) {
$attr_list = explode(',',$attr_list); # dela upp ala attr som ska tas fram i en array
$offset = 0;
$i = strpos($string,$start_tag,$offset);
while ($i !== FALSE) { # loopa igenom alla taggarna
$xml_offset = NULL;
$start = strpos($string,$start_tag,$offset); # ta fram var taggen börjar
if($start !== FALSE) { #om det finns en av den eftersökta tagen
$xml_string = substr($string,$start); ## gå till där taggen har börjat
$xmllen = strpos($xml_string,$end_tag); ## ta fram var xml taggen tar slut
if($xmllen !== FALSE) { #om det finns ett slut på xml taggen
$xml_string = substr($xml_string,0,$xmllen); # ta fram själva xml taggen
### LOOPA igenom alla attributen och lägg in värdena i en sträng
for($j = '1';$j <= count($attr_list); ++$j) {
@$temp = get_attr($xml_string,$attr_list[$j-1]);
@$attr_string[] = ($temp != NULL) ? $temp : "";
}
# ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ #
# ska något göras med varje xmltag så ska det göras hät
# ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ #
##########################################################
#### TEX KAN DET SE UT SÅ HÄR
#########################################################
# include('min_includefil.php');
if($attr_string['0'] == "news") { // kolla om första attributet har värdet news
// det första atirbutet är altså det som står först
// i listan över attirbut du skickar till funktionen.
$ny_kod = "Mina nyheter här";
} else { // annars vet vi inte vad som ska in
$ny_kod = "Jag vet inte vad som skulle in här";
}
// byt ut den gamla xml taggen mot vad vi nu ville byta ut den mot
$string = str_replace($xml_string.$end_tag, $ny_kod, $string);
#### ta fram var den här nya taggen slutade (viktigt att detta är rätt).
### För annaars kan det bli en aldrig slutande loop
$xml_offset = strpos($string,$ny_kod,$offset) + strlen($ny_kod);
# ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ #
# SLUT PÅ VAR MAN SKA GÖRA SAKER MED KODEN
# ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ #
} # slut på om xmllen != null
}# slut på om start != null
if($xml_offset !== NULL) { ## kolla om vi hittat en tag
$offset = $xml_offset; ## isf sätt en ny offset
} else { ## annars sett offsetten till slutet av $string för att avsluta
$offset = strlen($string);
}
$i = strpos($string,$start_tag,$offset);
} #slut på while loopen
return $string;
} # slut på funcktionen
###############################################################################################
### funcktion för att kolla om xxx='yyy' eller xxxx="yyy" finns i en sträng och isf ta ut yyy
### $attr ska vara tex class= eller id
##############################################################################################
function get_attr($string,$attr) {
$a_len = strlen($attr);
$attr_pos = strpos($string,$attr); ## ta reda på var attr börja
$attr_string = substr($string,($attr_pos+$a_len)); ## ta fram biten som kommer efter src=
#(+attr_len pga tex src= är 4 bokstäver)
if($attr_pos != NULL && $attr_string != NULL) { # om det finns attributet i en string
$enc_char = substr($attr_string,0,1); ## ta fram vad för tecken som omsluter src=
$enc_check = "0"; # bara så vi vet hur långt vi ska flytta senare
if($enc_char == " ") { ## gör så utifall man har så här src= " och inte src="
$enc_char = substr($attr_string,1,1);
$enc_check = "1"; # bara så vi vet hur långt vi ska flytta senare
}
if($enc_char == '"' || $enc_char == "'") { # vi har nu vad som omsluter src antingen " eller '
$attr_string = substr($attr_string,$enc_check); # ta ut det som kommer efter src="
$attr_len = strpos($attr_string,$enc_char,($enc_check+1)); # ta fram var src slutar,
# det sista är för att komma förbi den första ' eller "
$attr_string = substr($attr_string,($enc_check+1),($attr_len-1)); # ta fram bara src, tabort första "
$string = $attr_string;
} else { # om vi inte hittar enc_char
$string = NULL;
} # slut på if enc_char == " eller '
} else { # om attr_pos eller attr_string == NULL
$string = NULL;
} # slut på if attr_pos eller attr_string != null
return $string;
} #slut på funktionen
#################################################################
?>