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 :)
Peter SMedlem sedan dec. 20025 483 inlägg alert( '<div class="klass" style="border: 1px solid black;">'.match(/[a-z]+="[^"]+"|[a-z]+/gi) )
zcorpanMedlem sedan dec. 20042 245 inlägg 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.
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.
zcorpanMedlem sedan dec. 20042 245 inlägg Bara modifiera strängen så att du byter ut det sista tecknet, om det är ">", mot "/>".
Ja, det fungerar om det är XHTML men om jag börjar labba med XSL-FO så får jag parsererror :-(
zcorpanMedlem sedan dec. 20042 245 inlägg Det spelar väl ingen roll? Eller får du parse error för att du använder namnrymdsprefix (som då inte är deklarerat)?
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?
zcorpanMedlem sedan dec. 20042 245 inlägg Ä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...
Jag borde ju kunna ha namnrymden med som parameter till parsern, då ordnar sig ju faktiskt allting :)