Java 定义:无法将org.w3c.dom.doElement转换为布尔值

Java 定义:无法将org.w3c.dom.doElement转换为布尔值,java,javascript,Java,Javascript,我已经将以下Javascript代码翻译成Java。问题发生在sib; 我从未见过这样的声明。当你添加分号时,它到底做了什么?这类似于while()语句吗 public static String getElementXpath(DOMElement elt){ String path = ""; for (;elt.ELEMENT_NODE == elt.getNodeType(); elt = (DOMElement) elt.getParentNode

我已经将以下Javascript代码翻译成Java。问题发生在sib;

我从未见过这样的声明。当你添加分号时,它到底做了什么?这类似于while()语句吗

 public static String getElementXpath(DOMElement elt){
        String path = ""; 
        for (;elt.ELEMENT_NODE == elt.getNodeType(); elt = (DOMElement) elt.getParentNode()){
            int idx = getElementIdx(elt);
        }
        return path;        
    }

    private static int getElementIdx(DOMElement elt) {
        int count = 1;

         for (DOMElement sib = (DOMElement) elt.getPreviousSibling(); sib ; sib = (DOMElement) sib.getPreviousSibling())
            {
                if(sib.ELEMENT_NODE == sib.getNodeType() && sib.getTagName() == elt.getTagName()) count++;
            }

        return count;
    }

在javascript中,(DOMELENT sib=(DOMELENT)elt.getPreviousSibling();sib;sib=(DOMELENT)sib.getPreviousSibling())(即
;sib;
)的for语句的第二部分将检查是否定义了sib。要将其转换为Java,您需要执行
;兄弟姐妹!=无效。这应该是同等的


因此,在javascript中,整个for语句变成了for(DOMELENT sib=(DOMELENT)elt.getPreviousSibling();sib!=null;sib=(DOMELENT)sib.getPreviousSibling())的
,(DOMELENT sib=(DOMELENT)elt.getPreviousSibling();sib;sib=(DOMELENT)sib=(DOMELENT)sib.getPreviousSibling())的for语句的第二部分
(即
;sib;
)将检查是否定义了sib。要将其转换为Java,您需要执行
;兄弟姐妹!=无效。这应该是同等的


因此整个for语句变成了for(DOMElement sib=(DOMElement)elt.getPreviousSibling();sib!=null;sib=(DOMElement)sib.getPreviousSibling())
如果您指的是for
循环的第一个

for (;elt.ELEMENT_NODE == elt.getNodeType(); elt = (DOMElement) elt.getParentNode())
然后是首字母
表示不需要进行初始化

正常的
for
循环是:for(initialise;expression;update)因此您的循环只有表达式和更新部分。在您的情况下不需要初始化,因为
doElement
是作为参数传入的,在
for
循环中使用它之前不需要任何其他步骤


针对评论:

在循环的每次迭代之前,执行测试
elt.ELEMENT\u NODE==elt.getNodeType()
。这将测试
elt
引用的节点是否为元素节点(即不是文本节点、属性节点、注释节点等)。如果测试失败,则执行循环体

在循环体中,调用
getElementIdx
来计算此节点在同名同级节点之间的相对位置。该值存储在
idx
中,但不进行任何处理,然后丢弃该值

执行循环体后,执行更新
elt=(domeElement)elt.getParentNode()
。这会将
elt
更改为引用其先前引用的节点的父节点


作为第一步,我将把
elt.ELEMENT\u NODE==elt.getNodeType()
更改为
NODE.DOCUMENT\u NODE==elt.getNodeType()
(请参见下面来自Palo Ebermann的评论),因为这将导致您的程序通过父节点返回,直到找到文档的根(如果您指的是
循环的第一个

for (;elt.ELEMENT_NODE == elt.getNodeType(); elt = (DOMElement) elt.getParentNode())
然后是首字母
表示不需要进行初始化

正常的
for
循环是:for(initialise;expression;update)因此您的循环只有表达式和更新部分。在您的情况下不需要初始化,因为
doElement
是作为参数传入的,在
for
循环中使用它之前不需要任何其他步骤


针对评论:

在循环的每次迭代之前,执行测试
elt.ELEMENT\u NODE==elt.getNodeType()
。这将测试
elt
引用的节点是否为元素节点(即不是文本节点、属性节点、注释节点等)。如果测试失败,则执行循环体

在循环体中,调用
getElementIdx
来计算此节点在同名同级节点之间的相对位置。该值存储在
idx
中,但不进行任何处理,然后丢弃该值

执行循环体后,执行更新
elt=(domeElement)elt.getParentNode()
。这会将
elt
更改为引用其先前引用的节点的父节点


作为第一步,我将把
elt.ELEMENT\u NODE==elt.getNodeType()
更改为
NODE.DOCUMENT\u NODE==elt.getNodeType()
(请参阅下面来自Palo Ebermann的评论),因为这将导致程序通过父节点返回,直到找到文档的根节点为止。

这是关于DOM的问题吗,或者一个关于Java for loops如何工作的问题?这是一个关于DOM的问题,还是一个关于Java for loops如何工作的问题?那么这是否意味着基本上,在每次迭代中,elt=父节点?因此,当没有更多的父节点时,它将停止?我已经在答案中添加了一些细节来处理您的评论。对于
元素节点
(或
文档节点
)常量,最好使用
节点。元素节点
,而不是用某个对象引用它-这样比较容易混淆。@Paŭlo eberman-好的观点-我将在中编辑它。除此之外,问题中发布的原始代码还有许多其他问题,不幸的是,这是否意味着基本上,在每次迭代中,elt=父节点?因此,当没有更多的父节点时,它将停止?我已经在答案中添加了一些细节来处理您的评论。对于
元素节点
(或
文档节点
)常量,最好使用
节点。元素节点
,而不是用某个对象引用它-这样比较容易混淆。@Paŭlo eberman-好的观点-我将在中编辑它。不幸的是,问题中发布的原始代码还有许多其他问题