Невозможно выполнить запросы Javascript XPath для созданного документа - PullRequest
1 голос
/ 05 октября 2011

Задача

Я создаю документ с использованием javascript и хочу выполнить запросы XPath к этому документу.

  • Я пробовал это в Safari / Chrome
  • Я прочитал о поиске createDocument / xpath, и кажется, что этот код должен работать
  • На данный момент кажется, что это может быть ошибка webkit

Мои требования:

  • Я могу использовать innerHTML () для настройки документа
  • Я могу выполнить поиск xpath с тэгами

код:

Если вы скопируете / вставите следующую информацию в инспектор веб-наборов, вы сможете воспроизвести.

function search(query, root) {  
  var result = null;
  result = document.evaluate(query, root, null, 7,null);

  var nodes = [];
  var node_count = result.snapshotLength;

  for(var i = 0; i < node_count; i++) {
    nodes.push(result.snapshotItem(i));
  }

  return nodes;
}

x = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', 'HTML');  

body = x.createElement('body');
body.innerHTML = "<span class='mything'><a></a></span>";

xdoc = x.documentElement; //html tag
xdoc.appendChild(body);

console.log(search(".", xdoc));     // --> [<html>​…​</html>​]
console.log(search("/*", xdoc));    // --> [<html>​…​</html>​]
console.log(search("/html", xdoc)); // --> []

Best Guess

Так что я точно могу искать с помощью XPath, но я не могу искать с помощью тэгов. Есть ли что-то глупое, что я упускаю из пространства имен?

1 Ответ

0 голосов
/ 21 октября 2011

Вы пробовали:

console.log(search("//html", xdoc));

Я не знаком с Safari конкретно, но проблема может заключаться в том, что Safari добавляет другой узел поверх HTML или что-то в этом роде. Если бы это было так, первые два запроса могли бы показать вам этот узел плюс его дочерние элементы, что бы выглядело так, как будто они работают должным образом, в то время как третий запрос не будет выполнен, потому что не было бы корневого => узла HTML .

Просто мысль.

...