importClass("VXmlReader");
// -------------------------------------------------------
// Parseador de ficheros XML en formato xbel 1.0
// -------------------------------------------------------
// Preparamos el control treewidget
var treeWidget = theRoot.dataView().control("TREE_WIDGET");
// Leemos el fichero desde la senda del control
var fileEdit = theRoot.dataView().control("FILE");
var inFile = new VFile( fileEdit.text );
inFile.open(VFile.OpenModeReadOnly);
// Preparamos el objeto para parsear el XML
var xml = new VXmlReader();
// Leemos el primer elemento del fichero para comprobar que es de tipo xbel versión 1.0
if (xml.readNextStartElement())
if (xml.name() == "xbel" && xml.attributeValue("version") == "1.0")
while (xml.readNextStartElement())
if (xml.name() == "folder")
readFolder(treeWidget, 0, xml);
else if (xml.name() == "bookmark")
readBookmark(treeWidget, 0, xml);
else if (xml.name() == "separator")
readSeparator(treeWidget, 0, xml);
xml.skipCurrentElement();
xml.raiseError("Este fichero no es un XBEL 1.0");
// Ajusta las columnas al contenido
treeWidget.resizeColumnToContents(0);
// --------------------------
// --------------------------
function readFolder(tree, item, xml)
itemFolder = item.addChild();
itemFolder = tree.addTopLevelItem();
var folded = (xml.attributeValue("folded") != "no");
itemFolder.setExpanded(!folded);
while (xml.readNextStartElement())
if (xml.name() == "title")
readTitle(itemFolder, xml);
else if (xml.name() == "folder")
readFolder(tree, itemFolder, xml);
else if (xml.name() == "bookmark")
readBookmark(tree, itemFolder, xml);
else if (xml.name() == "separator")
readSeparator(tree, itemFolder, xml);
xml.skipCurrentElement();
// ----------------------
// ----------------------
function readTitle( item, xml )
var title = xml.readElementText();
// ---------------------------
// ---------------------------
function readBookmark(tree, item, xml)
itemBookmark = item.addChild();
itemBookmark = tree.addTopLevelItem();
itemBookmark.setFlags(0 | itemBookmark.flags() | VTreeItem.ItemIsEditable);
itemBookmark.setText(0, "Título desconocido");
itemBookmark.setText(1, xml.attributeValue("href"));
while (xml.readNextStartElement())
if (xml.name() == "title")
readTitle(itemBookmark, xml);
xml.skipCurrentElement();
// --------------------------
// --------------------------
function readSeparator(tree, item, xml)
itemSeparator = item.addChild();
itemSeparator = tree.addTopLevelItem();
itemSeparator.setText(0, "...............................................................................");
xml.skipCurrentElement();