webForumDet fria alternativet

Parsa XML-sträng

JavaScript

9 svar · 660 visningar · startad av BrutalDeluxe

Medlem sedan nov. 200650 inlägg
Frågan#1

Jag håller på med en XML-editor mha en editerbar iframe och javascript och har stött på ett litet problem. Jag behöver parsa en xml-sträng och få ut element och attribut.

Ex. <div class="klass" style="border: 1px solid black;">

För denna strängen vill jag ha ut

element: div
attribut: class="klass", style="border: 1px solid black;"

Finns det något enkelt sätt att göra detta eller måste jag hålla på och krångla med strängar :)

Medlem sedan dec. 20025 483 inlägg
#2
alert( '<div class="klass" style="border: 1px solid black;">'.match(/[a-z]+="[^"]+"|[a-z]+/gi) )
Medlem sedan dec. 20042 245 inlägg
#3

Hmm... att parsa XML med regexp är nog inte direkt idiotsäkert... speciellt om det handlar om en XML-editor då användaren kan mata in vilken text som helst borde all välformad XML hanteras korrekt (och strängar som inte är välformade borde inte släppas igenom).

Du kan parsa XML med javascript genom att använda webbläsarens XML-tolk, då får du en DOM som har element och attribut som noder. Om dokumentet där skriptet körs är ett XML-dokument kan du använda .innerHTML, annars kan du kanske använda metoden parseFromString() på ett DOMParser-objekt, eller liknande.

Medlem sedan nov. 200650 inlägg
#4

Problemet med webbläsarens XML-tolk är att jag inte har ett fullständigt XML-dokument. Jag vill bara parsa starttaggen. Elementtext och sluttagg finns inte i strängen.

Medlem sedan dec. 20042 245 inlägg
#5

Bara modifiera strängen så att du byter ut det sista tecknet, om det är ">", mot "/>".

Medlem sedan nov. 200650 inlägg
#6

Ja, det fungerar om det är XHTML men om jag börjar labba med XSL-FO så får jag parsererror :-(

Medlem sedan dec. 20042 245 inlägg
#7

Det spelar väl ingen roll? Eller får du parse error för att du använder namnrymdsprefix (som då inte är deklarerat)?

Medlem sedan nov. 200650 inlägg
#8

zcorpan skrev:

Eller får du parse error för att du använder namnrymdsprefix (som då inte är deklarerat)?

Ja, precis. Hur registrerar jag det i DOMParsern?

Medlem sedan dec. 20042 245 inlägg
#9

Är prefixet alltid samma? Isf kan du skriva in xmlns:foo="..." i strängen i samma veva som du byter ut > mot />, men om du inte vet prefixet (eller prefixen) så blir det svårare, då behöver du egentligen en XML parser utan stöd för namnrymder eller nåt...

Medlem sedan nov. 200650 inlägg
#10

Jag borde ju kunna ha namnrymden med som parameter till parsern, då ordnar sig ju faktiskt allting :)

267 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)