Возможно, вы пришли к этому наивно, но главная особенность вашего XML-дизайна заключается в том, что он оптимизирован для поиска по дате. Если ваш XML-документ большой, и вы выполняете большой поиск по дате (что, я подозреваю, является наиболее распространенным вариантом использования в персональном органайзере), это хорошо.
Выполнение этого шаблона XPath:
/calendar/year[@value='2008']/month[@value='10']/day[@value='7']/activity
рассмотрит намного меньше узлов, чем будет, используя шаблон, который вам понадобится в упрощенной организации Kev:
/calendar/activity[@year='2008' and @month='10' and @day='7']
, который в основном должен смотреть на каждый узел в документе.
Заметьте, кстати, что я предполагаю, что атрибуты month
и day
являются числовыми. Это важно, потому что вы почти наверняка захотите отсортировать эти данные в какой-то момент, и если вы не собираетесь поддерживать порядок сортировки в документе (для которого, я допускаю, может быть задан аргумент), вы ' Вам понадобятся эти атрибуты в форме, в которой их легко отсортировать.
Также важно, чтобы вы были последовательны в том, как вы храните числовые данные в этих атрибутах. (Если вы хотите выглядеть умно на собраниях, вы можете сказать, что вы устанавливаете канонические представления ваших типов данных.) Если вы используете начальные нули несколько раз, а не другие, например, ни один из этих шаблонов XPath не будет работать надежно, потому что @day='7'
не будет соответствовать атрибуту day
, установленному на "07"
. (Вы можете обойти это, преобразовав атрибуты в числа в вашем XPath, используя функцию number()
, но лучше избежать проблемы во-первых.)