Strona 1 z 1

Jak uzupełnić treeControl danymi z zewnętrznego pliku XML?

: wt kwie 09, 2013 8:06 am
autor: JackK
Witam.
Prawie wcale nie znam OpenOffice, a muszę wykonać uzupełnienie elementu treeControl danymi z pliku XML, który mam gdzieś na dysku. Jak przeczytałem na forum w j. ang. BASIC nie ma parsera XML i podobno jakoś XLST mogłoby mi być pomocne. Może mi ktoś powiedzieć, jak się do tego zabrać?

Z góry dziękuję,
Jacek

Re: Jak uzupełnić treeControl danymi z zewnętrznego pliku XM

: wt kwie 09, 2013 9:42 am
autor: JackK
Wiem już, jak wpisać dane do TreeControl-a.
Jak jednak odczytać plik XML?

Re: Jak uzupełnić treeControl danymi z zewnętrznego pliku XM

: wt kwie 09, 2013 11:07 am
autor: JackK
Wiem już jak w BASIC przetworzyć plik XML przez XLST. Jednak plik otwiera mi się jako nowy dokument. Jak zrobić, by treść została umieszczona w tablicy?
Mam:

Kod: Zaznacz cały

'** BASIC **
dim xmlurl as string
xmlurl = "file:///C:/Prace/ODG/payments.xml"

rem - Import payments
dim properties(0) as new com.sun.star.beans.PropertyValue
properties(0).Name = "FilterName"
properties(0).Value = "Payments_filter"

dim doc As Object
doc = StarDesktop.loadComponentFromURL(xmlurl, "_blank", 0, properties())

Re: Jak uzupełnić treeControl danymi z zewnętrznego pliku XM

: wt kwie 09, 2013 12:18 pm
autor: mg2
Tutaj jest działający przykład parsowania pliku XML:

http://www.oooforum.org/forum/viewtopic.phtml?t=4907

Re: Jak uzupełnić treeControl danymi z zewnętrznego pliku XM

: wt kwie 09, 2013 1:05 pm
autor: JackK
Dzięki, to się może przydać. Jednak to parsowanie pokazuje jedynie, jakie elementy są napotykane w pliku XML. Nie ma tam nic o tym, jak odczytać wartość elementu lub jego atrybut.
Metody wywoływane w trakcie parsowania to (według dokumentacji http://www.openoffice.org/api/docs/comm ... ndler.html ):
startDocument - receives notification of the beginning of a document.
endDocument - receives notification of the end of a document.
startElement - receives notification of the beginning of an element .
endElement - receives notification of the end of an element.
characters - receives notification of character data.
ignorableWhitespace - receives notification of white space that can be ignored.
processingInstruction - receives notification of a processing instruction.
setDocumentLocator - receives an object for locating the origin of SAX document events.
Zrobienie

Kod: Zaznacz cały

Sub DocHandler_characters( cStr As String)
	Print "STRING: ", cStr
End Sub
coś poprawiło, bo wyświetla wartość elementu. Niestety atrybuty całkowicie pomija, a dodatkowo wyświetla znaki nowej linii i napotkane spacje.

Re: Jak uzupełnić treeControl danymi z zewnętrznego pliku XM

: wt kwie 09, 2013 7:20 pm
autor: mg2
Tak baaardzo z grubsza to żeby dobrać się do elementów trzeba użyć

Kod: Zaznacz cały

 
XFastParser
XFastDocumentHandler
XFastTokenHandler
Wszystko ma status "nieopublikowane", musisz kombinować...

Zacznij od

Kod: Zaznacz cały

sfp = createUnoService( "com.sun.star.xml.sax.FastParser" )
fdh = GetProcessServiceManager().createInstance("com.sun.star.xml.sax.FastDocumentHandler")
sfp.setFastDocumentHandler(fdh)
(FastDocumentHandler jest nieopublikowany więc nie ma funkcji CreateFastDocumentHandler(). Należy wyjść z GetProcessServicemanager())

http://wiki.openoffice.org/wiki/Documen ... O_Services

W najgorszym wypadku trzeba będzie napisać własny "UNO service" (np. w Javie korzystając ze standardowego parsera XML) i zarejestrować go w L/OO jako rozszerzenie. Funkcje zawarte serwisie będą dostępne z poziomu basica.

http://www.oooforum.org/forum/viewtopic.phtml?t=47161
http://joerg-richter.fuyosoft.com/?p=43