我写了我想要达到的目标.但是,getElementIdx()函数不会返回正确的计数. getPrevIoUsSibling()存在问题,但我不知道为什么.

public static String getElementXpath(DOMElement elt){

String path = "";

try{

for (; elt != null; elt = (DOMElement) elt.getParentNode()){

int idx = getElementIdx(elt);

String xname = elt.getTagName().toString();

if (idx >= 1) xname += "[" + idx + "]";

path = "/" + xname + path;

}

}catch(Exception ee){

}

return path;

}

public static int getElementIdx(DOMElement elt) {

int count = 1;

try{

for (DOMElement sib = (DOMElement) elt.getNextSibling(); sib != null; sib = (DOMElement) sib.getNextSibling())

{

if(sib.getTagName().equals(elt.getTagName())){

count++;

}

}

}catch(Exception ee){

}

return count;

}

你的标题谈到getPrevIoUsSibling(),但你的代码只使用getNextSibling() – 为什么?我不明白为什么你想要使用getNextSibling()…你想知道在当前的那个之前有多少同名的元素,而不是在它之后有多少元素.

你捕捉和吞咽异常这一事实也是非常可疑的……你为什么要这样做呢?如果您有异常,该方法不应该以异常终止吗?

您还应该考虑到getPrevIoUsSibling可能不返回元素这一事实 – 例如,它可能返回一个文本节点.你想要跳过那些 – 目前你会得到一个异常,它将终止循环并返回当前计数.

如果这些没有帮助,请发布一些示例XML,指出一个节点,并说明代码当前返回的内容(以及发布更新的代码).只是说它没有返回正确的计数并不像说它返回什么,以及你期望它返回的那样有用.

编辑:这是我期望代码看起来像:

public static int getElementIndex(Element original) {

int count = 1;

for (Node node = original.getPrevIoUsSibling(); node != null;

node = node.getPrevIoUsSibling()) {

if (node instanceof Element) {

Element element = (Element) node;

if (element.getTagName().equals(original.getTagName()) {

count++;

}

}

}

return count;

}

您也可以使用if(node.getNodeType()== Node.ELEMENT_NODE)而不是instanceof test.

java dom xpath_Java:在org.w3c.dom文档中获取元素的xpath相关推荐

  1. 将HTML字符转换为DOM节点并动态添加到文档中

    将HTML字符转换为DOM节点并动态添加到文档中 将字符串动态转换为DOM节点,在开发中经常遇到,尤其在模板引擎中更是不可或缺的技术. 字符串转换为DOM节点本身并不难,本篇文章主要涉及两个主题: 1 ...

  2. 将html代码转换为dom,将HTML字符转换为DOM节点并动态添加到文档中

    将HTML字符转换为DOM节点并动态添加到文档中 将字符串动态转换为DOM节点,在开发中经常遇到,尤其在模板引擎中更是不可或缺的技术. 字符串转换为DOM节点本身并不难,本篇文章主要涉及两个主题: 1 ...

  3. Element 对象表示 XML 文档中的元素。

    Element 对象 Element 对象表示 XML 文档中的元素.元素可包含属性.其他元素或文本.如果元素含有文本,则在文本节点中表示该文本. 重要事项:文本永远存储在文本节点中.在 DOM 处理 ...

  4. 文档中根元素后面的标记格式必须正确。

    文档中根元素后面的标记格式必须正确. php或其它语言动态输出的xml,最开始<标记 前面有空格,最后面>标记 后面有 空格 导致xml解析出错 解决办法: var data:String ...

  5. Java使用 PDFBox 2.0 从 PDF 文档中读取所有文本

    在本教程中,我们将学习在 Java 程序中使用 PDFBox 2.0 库从 pdf 文档中读取所有文本. PDF 文档可能包含文本.嵌入图像等作为其内容.PDFBox 中的 PDFTextStripp ...

  6. html文档中的元素分为两部分,云开HTML5开发基础与应用(20秋)形考作业2【标准答案】...

    HTML5开发基础与应用(20秋)形考作业2 试卷总分:100  得分:100 一.单选题 (共 10 道试题,共 40 分) 1.下列说法中错误的是:( ). A.text-overflow用于处理 ...

  7. DOM(Document object madle) 文档对象模型: 元素节点 文本节点 属性节点

    [DOM树节点] DOM 节点分为三大类:元素节点 文本节点 属性节点 文本节点 属性节点 为元素节点的两个子节点 通过getElement系列方法,可以去到元素节点. [查看节点] 1.docume ...

  8. java 实现将图片替换到word 文档中

    首先将word 转换成xml ,再修改后缀名位ftl ,并用freemark 标签替换其中的主要设置,模板参考如下 <?xml version="1.0" encoding= ...

  9. html文档中的元数据,javascript – 如何使用pdf.js从pdf文档中获取元数据

    仅使用没有第三方查看器的PDF.js库,您可以使用promises获取这样的元数据. PDFJS.getDocument(url).then(function (pdfDoc_) { pdfDoc = ...

最新文章

  1. 重置忘记的mysql root密码
  2. mysql获取当前节点的所有叶子节点_mssql sqlserver 如何获取一个叶子节点下所有子节点呢?...
  3. php mysql 库存变负数_php解决秒杀并发入库导致的库存负数
  4. Qt工作笔记-QString中Split与section效率实践
  5. java freemark 使用_freemarker单独使用介绍
  6. Django视图与模板+vs2019
  7. Docker DeskTop安装Jenkins教程[Windows]
  8. 3-1 Aruba交换机实用配置-VSF 2020
  9. IPFS为什么被学者称为数据的“黄金保险柜”?
  10. opencv之subtract
  11. 大象装进冰箱要几步?Python 来解答
  12. 发版名词介绍(alpha,beta,RC,Release)
  13. 新态势感知系列(1):从态势感知到全方位态势感知
  14. 多人赛跑用多线程实现
  15. mysql set names中文乱码_mysql中文乱码解析
  16. Android手机:破解锁屏密码
  17. Hulu新剧向 | 神剧归位《使女的故事》第四季高能来袭!
  18. 发票识别 发票扫描识别 一键导出表格 增值税发票扫描识别
  19. html百度地图拖动,百度地图为marker添加拖拽事件
  20. web前端动画_西游记

热门文章

  1. nstimer循环引用_警惕使用NSTimer时的循环引用
  2. 工作中应用计算机,浅谈计算机在我国计工作中的应用与发展.doc
  3. python将数据存入mysql数据库中_python3 两种方法将数据存入mysql数据库
  4. [数据库]---nosql,非关系型数据库整理
  5. java数组有跨类建立对象_必会的 55 个 Java 性能优化细节!一网打尽!
  6. 考研数学(180°为什么等于π)
  7. java 打包后 文件资源文件 jar,JAVA打包成JAR无法找到资源文件
  8. 302状态码_HTTP协议详解(基础概念 方法 状态码 首部 连接 Cookie 新特性 安全)
  9. python坐标定位_如何利用Python识别并定位图片中某一个色块的坐标?
  10. axure html 360安装扩展,win10系统360浏览器添加Axure扩展的操作方法