Чтение значения входа с помощью XPath, затем с помощью в Механике

Возможно, да, но я не знаю, рекомендуется ли это. В любом случае вы можете обработать исключения, выданные во время выполнения KieBase, зарегистрировав ConsequenceExceptionHandler для него.

Этот ответ объясняет упомянутый подход.

Надеюсь, это поможет,

9
задан vaultah 3 August 2016 в 07:28
поделиться

3 ответа

Для XPath попробуйте:

//input[@type="hidden" and @name="val" and position() = 1]/@value

Для использования в сценарии GreaseMonkey сделайте что-то вроде этого:

var result = document.evaluate(
  "//input[@type='hidden' and @name='var' and position()=1]/@value",
  document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null
);

var hiddenval = result.snapshotItem(0);

if (hiddenval)
  alert("Found: " + hiddenval.nodeValue);  
else
  alert("Not found.");

Строго говоря: Используя "position()=1" в XPath фильтр не абсолютно необходим, потому что только первый возвращенный результат будет используемым так или иначе (через snapshotItem(0)). Но почему сборке больший набор результатов, чем Вы действительно нужно.

Править: Используя результат XPath ORDERED_NODE_SNAPSHOT_TYPE тип удостоверяется, что Вы получаете узлы в порядке документа. Это означает, что первый узел результата также будет первым узлом в документе.

18
ответ дан 4 December 2019 в 09:39
поделиться

Tomalak имеет верное представление, но я сделал бы это немного по-другому.

var result = document.evaluate(
  "//input[@type='hidden' and @name='var']",
  document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);

var input = result.iterateNext();

if (input)
  alert("Found: " + input.value);  
else
  alert("Not found.");

Таким образом, Вы указываете как часть набора результатов, что Вы хотите только один возвращенный объект (первый в документе, в этом случае). Кроме того, здесь Вы выбираете узел DOM и затем читаете value свойство для получения значения. Я нашел, что это более надежно, чем выборка строкового значения через XPath (хотя Ваш пробег может варьироваться).

4
ответ дан 4 December 2019 в 09:39
поделиться

Одна возможность состоит в том, чтобы включать jQuery в Ваши сценарии. Это обеспечит более простой синтаксис для доступа к элементам.

// ==UserScript==
// @name           MyScript
// @namespace      http://example.com
// @description    Example
// @include        *
//
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js
// ==/UserScript==

var input = $("input[type='hidden'][name='var']");

if (input) {
  alert("Found: " + input.val());  
} else {
  alert("Not found.");
}
0
ответ дан 4 December 2019 в 09:39
поделиться
Другие вопросы по тегам:

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