簡體   English   中英

如何通過node.js中的XPath用xmldom更改DOM?

[英]How to alter DOM with xmldom by XPath in node.js?

我正在嘗試更改node.js中的DOM結構。 我可以加載XML字符串,並使用xmldom( https://github.com/jindw/xmldom )中的本機方法對其進行更改,但是當我加載XPath( https://github.com/goto100/xpath )並嘗試通過該選擇器更改DOM,它不起作用。

還有另一種方法可以做到這一點嗎? 要求是:

  • 必須在瀏覽器和服務器端都能工作(純js?)
  • 不能使用eval或其他代碼執行工具(出於安全考慮)

以下示例代碼顯示了我今天的工作方式,也許我只是想念一些基本的知識?

var xpath = require('xpath'),
    dom   = require('xmldom').DOMParser;

var xml = '<!DOCTYPE html><html><head><title>blah</title></head><body id="test">blubb</body></html>';
var doc = new dom().parseFromString(xml);

var bodyByXpath = xpath.select('//*[@id = "test"]', doc);
var bodyById    = doc.getElementById('test');
var h1          = doc.createElement('h1').appendChild(doc.createTextNode('title'));

// Works fine :)
bodyById.appendChild(h1);

// Does not work :(
bodyByXpath.appendChild(h1);

console.log(doc.toString());

bodyByXpath不是單個節點。 select的第四個參數(如果為true)將告訴它僅返回第一個節點;否則為false。 否則,它是一個列表。

作為aredridel狀態,默認情況下,當選擇節點時, .select()將返回一個數組。 因此,您需要從該陣列中獲取節點。

如果只想選擇一個節點,也可以使用.select1()

var bodyByXpath = xpath.select1('//*[@id = "test"]', doc);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM