Я могу создать стоимость для недостающего тега в XPath?

Давайте рассмотрим интерфейс как указатель.

Скажем, у вас есть указатель a, и он равен нулю, и ничего не указывает.

var a *int // nil

Тогда у вас есть указатель b, и он указывает на a.

var b **int
b = &a // not nil

Посмотрите, что произошло? b указывает на указатель, который указывает на ничего. Так что даже если это указатель nil в конце цепочки, b указывает на что-то - это не ноль.

Если вы заглянете в память процесса, это может выглядеть так: это:

address | name | value
1000000 | a    | 0
2000000 | b    | 1000000

Видите? a указывает на адрес 0 (это означает, что он nil), а b указывает на адрес a (1000000).

То же самое относится к интерфейсам (за исключением того, что они немного в памяти ).

Как и указатель, интерфейс, указывающий на указатель на nil, не будет нить.

Здесь см. себя , как это работает с указателями и , как это работает с интерфейсами .

9
задан JPLemme 2 September 2008 в 19:25
поделиться

5 ответов

Это может быть сделано, но только если возвращаемое значение, когда узел действительно существует, является строковым значением узла, не самого узла. XPath

substring(concat("N/A", /foo/baz), 4 * number(boolean(/foo/baz)))

возвратит строковое значение baz элемент, если это существует, иначе строка "N/A".

Обобщать подход:

substring(concat($null-value, $node),
          (string-length($null-value) + 1) * number(boolean($node)))

где $null-value строка нулевого значения и $node выражение для выбора узла. Отметьте это если $node оценивает к набору узлов, который содержит больше чем один узел, строковое значение первого узла используется.

5
ответ дан 4 December 2019 в 19:37
поделиться

Для пустых узлов Вам нужно

boolean(string-length($node))

(Можно опустить вызов к number() поскольку бросок от булевской переменной до числа неявен здесь.)

2
ответ дан 4 December 2019 в 19:37
поделиться

Это может быть сделано с XPath 1.0. Скажите, что Вы имеете

<foo>
  <bar/>
</foo>

Если Вы хотите протестировать если foo имеет a baz ребенок,

substring("N/A", 4 * number(boolean(/foo/baz)))

возвратит "N/A" если выражение /foo/baz возвращает пустой набор узлов, иначе он возвращает пустую строку.

1
ответ дан 4 December 2019 в 19:37
поделиться

Короткий ответ: нет. Такую функцию рассмотрели и явно отклонили для версии 2 спецификации XPath (см. ненормативный Иллюстративный Написанный пользователем раздел Functions).

3
ответ дан 4 December 2019 в 19:37
поделиться

@jelovirt

Таким образом, если я понимаю это правильно, мы связываем ответ по умолчанию и значение узла, и затем берем корректное подмножество получившей строки путем тестирования на существование узла для установки смещения для или обнуления или положение прямо после моей строки по умолчанию. Это - самое извращенное скручивание языка, который я когда-либо видел. (Я люблю его!)

Разъяснить то, что Вы сказали, этот подход работы, когда узел отсутствует, не, когда узел пуст. Но путем замены "числа (булевская переменная ($node))" с "длиной строки ($node)" это будет работать над пустыми узлами вместо этого.

1
ответ дан 4 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: