使用Java即时使用xPath修改HTML源代码

问题描述

|| 假设我有一个HTML源代码,例如:
<a href=\"http://google.com\">Google</a>
<a href=\"http://yahoo.com\">Yahoo</a>
<a href=\"http://msn.com\">MSN</a>
我有什么办法可以使用Javascript使用xPath修改HTML源代码:查找所有锚点,在文本前面添加文本,并使用警报框显示新的HTML源代码?
<a href=\"http://google.com\">Visit Google</a>
<a href=\"http://yahoo.com\">Visit Yahoo</a>
<a href=\"http://msn.com\">Visit MSN</a>
    

解决方法

        如果您需要XSLT的全部功能来进行多次转换,则可以使用sarissa之类的东西。 我认为您可能会将xPath表达式与CSS选择器混淆,因此对于这种情况,我建议使用以下jQuery代码:
// Put a script tag including jquery.js here

<div id=\"container\">
  <a href=\"http://google.com\">Google</a>
  <a href=\"http://yahoo.com\">Yahoo</a>
  <a href=\"http://msn.com\">MSN</a>
</div>

<script>
    $(\"a\").prepend(\"Visit \");
    alert($(\"#container\").html());
</script>
问候。     ,        最简洁的答案是不\”。 XPath是一种用于选择DOM中元素的方法。它也可以用于读取属性和计算值,但不能用于修改DOM。您可能会对XSLT感到困惑,后者使用XPath表达式选择元素并可以返回修改后的文档。您可以使用通用XML文档,然后使用XSLT使用不同的XSL样式表来生成各种语言的不同文档,例如HTML,XML,postscript等。 无论如何,在这种情况下为什么还要打扰XPath?有一个document.links集合,它需要简单的属性访问,而无需函数调用或评估XPath expressoins。您可以通过分配给W3C textContent或专有的MS innerText属性来更改简单的文本内容(再次,简单的属性访问而不是函数调用):
function modLinks() {

  var links = document.links;
  var i = links.length;

  while (i--) {
    setText(links[i],\'Visit \' + getText(links[i]) );
  }
}

// Simple helper functions,can be made faster and more robust
// but sufficient for an example. 

function getText(el)  {

  if (typeof el.textContent == \'string\') {
    return el.textContent;

  } else if (typeof el.innerText == \'string\') {
    return el.innerText;
  }
}

function setText(el,text)  {

  if (typeof el.textContent == \'string\') {
    el.textContent = text;

  } else if (typeof el.innerText == \'string\') {
    el.innerText = text;
  }
}
    ,        如上所述,XPath无法与未解析的字符串一起有效地工作。 因此,一种方法是将某些元素(例如invisible)的innerHTML设置为HTML源字符串。 这将导致源被解析为DOM树。然后,您可以使用myDiv.getElementsByTagName(\'a \')或jQuery $(\'a \',myDiv)查找链接。 (您甚至可以使用XPath
.//a
,但是为什么在使用更简单的工具时会使用更复杂的工具?) 然后,一旦您修改了字符串,例如就像有人说使用“ 5”时,您可以通过检索不可见的“ 7”的“ 6”属性来输出修改后的HTML。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...