Jeśli to naprawdę takie proste, możesz po prostu napisać to za pomocą printf() lub podobnego.
Do parsowania najlepiej użyć prawdziwego parsera XML (być może SimpleXML, który zasugerował @netpork). Ale jeśli chodzi o coś naprawdę banalnego, możesz po prostu użyć wyrażenia regularnego - oto mój zwykły zestaw, z którego będziesz potrzebował głównie "attrlist" i "stag" (dla listy atrybutów i tagu startowego).
xname = "([_\\w][-_:.\\w\\d]*)"; # XML NAME (imperfect charset)
xnmtoken = "([-_:.\\w\\d]+)"; #
xncname = "([_\\w][-_.\\w\\d]*)"; #
qlit = '("[^"]*"|\'[^\']*\')'; # Includes the quotes
attr = "$xname\\s*=\\s*$qlit"; # Captures name and value
attrlist = "(\\s+$attr)*"; #
startTag = "<$xname$attrlist\\s*/?>"; #
endTag = "</$xname\\s*>"; #
comment = "(<!--[^-]*(-[^-]+)*-->)"; # Includes delims
pi = "(<\?$xname.*?\?>)"; # Processing instruction
dcl = "(<!$xname\\s+[^>]+>)"; # Markup dcl (imperfect)
cdataStart = "(<!\[CDATA\[)"; # Marked section open
cdataEnd = "(]]>)"; # Marked section close
charRef = "&(#\\d+|#[xX][0-9a-fA-F]+);"; # Num char ref (no delims)
entRef = "&$xname;"; # Named entity ref
pentRef = "%$xname;"; # Parameter entity ref
xtext = "[^<&]*"; # Neglects ']]>'
xdocument = "^($startTag|$endTag|$pi|$comment|$entRef|$xtext)+\$";
projekt specyfikacji XML nawet zawierał „trywialny” gramatyki XML, który może znaleźć granice węzłów poprawnie, ale nie złapać wszystkie błędy, rozszerzając referencje podmiotu czenia zobacz https://www.w3.org/TR/WD-xml-lang-970630#secF.
Główną wadą jest to, że jeśli napotkasz bardziej interesujące dane później, może się zepsuć. Na przykład ktoś może wysyłać do Ciebie dane z komentarzem, błędem składni lub niecytowanym atrybutem, lub używając innej nazwy.
Jeśli będziesz potrzebować parsować dużo danych XML, możesz spróbować [Simple XML] (http://simple.sourceforge.net/). – netpork