webForumDet fria alternativet

Formatera felaktig XML

PHP

3 svar · 292 visningar · startad av oskob

Medlem sedan maj 20021 558 inlägg
Frågan#1

Hejsan!
Jag tänkte bara höra om det är möjligt att göra en felaktigt formaterad XML-fil till att bli rätt formaterad med PHP.

Filen är gigantisk och uppdateras hela tiden så det är ingen ide att sitta och göra det manuellt och efter som felen är likadana hela tiden borde man ju kunna lära PHP att rätta till dem.

Från första början ser formateringen ut såhär:


["Class Skills"] = {
	["Beast Mastery"] = "1:1",
	["Survival"] = "1:1",
	["Marksmanship"] = "1:1",
	["Order"] = 1,
}

Och den ska alltså bli såhär:

g
<ClassSkills>
	<BeastMastery>1:1</BeastMastery>
	<Survival>1:1</Survival>
	<Marksmanship>1:1</Marksmanship>
	<Order>1:1</Order>
</ClassSkills>

Först ersätter jag alla [" med < och samma sak med "] och tar bort alla = { } , och mellanslag.

Då blir det:

<ClassSkills>  
	<BeastMastery>  1:1
	<Survival>  1:1
	<Marksmanship>  1:1
	<Order>  1

Det svåra är nu alltså att få den att avsluta tagarna vilket den inte gör i kodexemplet.

Någon som har några förslag?

Tack på förhand!

Medlem sedan maj 20021 558 inlägg
#2

Fick en liten ide nu men jag vet inte riktigt om den skulle fungera i praktiken...

Om man gör ett script som går igenom varje rad tex:

<blaha>Hejhopp

så sparar den det mellan < och > och lägger till i slutet av raden och lägger till ett / och sedan flyttar till nästa etc.

Men hur ska den fatta att ett element iunnehåller andra element?
Och är det någon som har något tips på en sida med lite exempel hur man kan hantera textfiler?

Medlem sedan maj 20018 027 inlägg
#3

Re: Formatera felaktig XML

oskob skrev:

Från första början ser formateringen ut såhär:


["Class Skills"] = {
	["Beast Mastery"] = "1:1",
	["Survival"] = "1:1",
	["Marksmanship"] = "1:1",
	["Order"] = 1,
}

Inte nog med att den är felformatterad. Det är ju inte xml överhuvudtaget. Vad det nu är för notation egentligen, vet jag inte. Om det fanns någon typ av läsare för denna notation, som parsar allt till en prydlig struktur, skulle du utifrån den strukturen, och med hjälp av något xmlDOM-bibliotek, kunna skapa en xml-fil utifrån detta. Gör du det med hjälp av ett xmlDOM-bibliotek, då kommer sluttaggarna automatiskt bli rätt. Det är ett betydligt säkrare sätt än att köra med search'n'replace. Det finns xmlDOM-bibliotek för flera programmeringsmiljöer. Jag har använt sådana från både Microsoft, och något som används i Java. De fungerar likartat.

Medlem sedan maj 20021 558 inlägg
#4

Nej det är en konstig fil som exporteras från world of warcraft med info om spelaren men jag har lyckats nu genom att böka lite med strängar och grejer.
Så här blev lösningen:

while (!feof ($filen)) {
	
	$result=fgets($filen,560);
	$pos = strpos($result, '>')-1;
	$element = str_replace('\n', '', substr($result, 1, $pos));
	$element_content = rtrim(substr(strstr($result, '>') , 1));
	echo '<tr><td>';
	echo $element . '</td><td>' . $element_content . '</td></tr>';
	
	$sql = 'INSERT INTO

}
265 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)