Modul:Hilfsfunktionen: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Zeile 18: | Zeile 18: | ||
if i==1 then t[1]=inputstr end | if i==1 then t[1]=inputstr end | ||
return t | return t | ||
+ | end | ||
+ | |||
+ | -- Parsing einer XML-Antwort von SMW | ||
+ | function parse(xml) | ||
+ | --Lexer | ||
+ | local lex={} | ||
+ | for l1,l2,l3 in mw.ustring.gmatch(xml,'<([/]?)span([^>]*)>([^<]*)') do | ||
+ | if l1=='' then | ||
+ | table.insert(lex,{t='SO',a=robusttrim(l2)}) | ||
+ | else | ||
+ | table.insert(lex,{t='SC',a=''}) | ||
+ | end | ||
+ | if l3~='' then | ||
+ | table.insert(lex,{t='TX',a=robusttrim(l3)}) | ||
+ | end | ||
+ | end | ||
+ | --Parser | ||
+ | local rows={} | ||
+ | local row={} | ||
+ | local val='' | ||
+ | local level=0 | ||
+ | for k,v in pairs(lex) do | ||
+ | if (v.t=='SO')and(v.a=='class="smw-row"') then | ||
+ | row={} | ||
+ | level=1 | ||
+ | end | ||
+ | if (v.t=='SO')and(v.a=='class="smw-value"') then | ||
+ | val='' | ||
+ | level=2 | ||
+ | end | ||
+ | if (v.t=='TX')and(level==2) then | ||
+ | val=v.a | ||
+ | end | ||
+ | if (v.t=='SC')and(level==2) then | ||
+ | table.insert(row,val) | ||
+ | level=1 | ||
+ | end | ||
+ | if (v.t=='SC')and(level==1) then | ||
+ | table.insert(rows,row) | ||
+ | level=0 | ||
+ | end | ||
+ | end | ||
+ | return rows | ||
end | end |
Version vom 18. Mai 2021, 17:50 Uhr
Dokumentation und Testfälle unter Modul:Hilfsfunktionen/Doku.
-- Macht einen Trim in Kombination mit dem Entfernen der SMW-Tags function robusttrim(s) if s==nil then return '' end local p=mw.ustring.gsub(s,'%[%[SMW::on%]%]','') p=mw.ustring.gsub(p,'%[%[SMW::off%]%]','') return mw.text.trim(p) end -- Splittet einen String in einen Array anhand eines Separators function split(inputstr,sep) if sep==nil then sep="%s" end local t={} local i=1 for str in mw.ustring.gmatch(inputstr,"([^"..sep.."]+)") do t[i]=str i=i+1 end if i==1 then t[1]=inputstr end return t end -- Parsing einer XML-Antwort von SMW function parse(xml) --Lexer local lex={} for l1,l2,l3 in mw.ustring.gmatch(xml,'<([/]?)span([^>]*)>([^<]*)') do if l1=='' then table.insert(lex,{t='SO',a=robusttrim(l2)}) else table.insert(lex,{t='SC',a=''}) end if l3~='' then table.insert(lex,{t='TX',a=robusttrim(l3)}) end end --Parser local rows={} local row={} local val='' local level=0 for k,v in pairs(lex) do if (v.t=='SO')and(v.a=='class="smw-row"') then row={} level=1 end if (v.t=='SO')and(v.a=='class="smw-value"') then val='' level=2 end if (v.t=='TX')and(level==2) then val=v.a end if (v.t=='SC')and(level==2) then table.insert(row,val) level=1 end if (v.t=='SC')and(level==1) then table.insert(rows,row) level=0 end end return rows end