Использование jdom2: http://www.jdom.org/
import java.io.StringReader;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
String prettyXml = new XMLOutputter(Format.getPrettyFormat()).
outputString(new SAXBuilder().build(new StringReader(uglyXml)));
Не забывайте заглядывать в суперклассы, когда не можете что-то найти. В этом случае один из необходимых вам методов исходит из NSTableView, который является непосредственным суперклассом NSOutlineView.
Решение состоит в том, чтобы получить индекс строки для элемента, используя rowForItem:
, и если он не -1 (элемент не виден / не найден), создайте с ним набор индексов с помощью [NSIndexSet indexSetWithIndex:]
и передайте этот набор индексов в selectRowIndexes: byExndingSelection:
метод .
Нет, метода selectItem:
нет, но есть является методом rowForItem:
. Если вы объедините это с советом Питера об использовании selectRowIndexes: byExndingSelection:
выше, у вас должна быть вся необходимая информация.
Если вы действительно хотите иметь метод выбора элемента, я бы рекомендовал его вызов setSelectedItem:
для единообразия, вы можете написать что-то подобное в категории на NSOutlineView
- (void)setSelectedItem:(id)item {
NSInteger itemIndex = [self rowForItem:item];
if (itemIndex < 0) {
// You need to decide what happens if the item doesn't exist
return;
}
[self selectRowIndexes:[NSIndexSet indexSetWithIndex:itemIndex] byExtendingSelection:NO];
}
Я понятия не имею, работает ли этот код на самом деле; Я просто набросал это, чтобы проиллюстрировать концепцию.
Вот как я в итоге оказался. Предложения и исправления всегда приветствуются.
@implementation NSOutlineView (Additions)
- (void)expandParentsOfItem:(id)item {
while (item != nil) {
id parent = [self parentForItem: item];
if (![self isExpandable: parent])
break;
if (![self isItemExpanded: parent])
[self expandItem: parent];
item = parent;
}
}
- (void)selectItem:(id)item {
NSInteger itemIndex = [self rowForItem:item];
if (itemIndex < 0) {
[self expandParentsOfItem: item];
itemIndex = [self rowForItem:item];
if (itemIndex < 0)
return;
}
[self selectRowIndexes: [NSIndexSet indexSetWithIndex: itemIndex] byExtendingSelection: NO];
}
@end