Java 如果条件不与| |操作员一起工作

Java 如果条件不与| |操作员一起工作,java,xml,Java,Xml,我已经编写了java代码从xml标记中获取节点,并基于该节点将其删除。对于相同条件下的某些情况,它可以正常工作,但对于某些情况,它不起作用。我一直在尝试找到解决方案,但无法解决。请帮帮我,下面是我写的代码 import java.io.FileInputStream; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilde

我已经编写了java代码从xml标记中获取节点,并基于该节点将其删除。对于相同条件下的某些情况,它可以正常工作,但对于某些情况,它不起作用。我一直在尝试找到解决方案,但无法解决。请帮帮我,下面是我写的代码

import java.io.FileInputStream;
import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class CL_RGTIS_CREMAS_DWM_FILT {

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        CL_RGTIS_CREMAS_DWM_FILT domParse=new CL_RGTIS_CREMAS_DWM_FILT();
        try
        {
        FileInputStream in=new FileInputStream("C:/Users/Home/Downloads/Test1.xml");        
        FileOutputStream out = new FileOutputStream("C:/Users/Home/Downloads/out.xml");
        domParse.execute(in,out);   
        }
        catch(Exception e)
        {
            System.out.println("catch exception"+e.getMessage());

        }

    }
    public void execute(FileInputStream in,FileOutputStream out)
    {
        try
        {
            TransformerFactory  transformerFactory=TransformerFactory.newInstance();
            Transformer transformer=transformerFactory.newTransformer();

            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            //ignore whitespace within document
            factory.setIgnoringElementContentWhitespace(true);
            /*parser is aware of name space*/
            factory.setNamespaceAware(true);

            DocumentBuilder builderel=factory.newDocumentBuilder();
            Document  docIn=builderel.parse(in);
            Node root, headerItem = null,childItem=null,childItem1=null;
            NodeList id, headerNodes = null,childNodes=null,childNodes1=null;

            id = docIn.getElementsByTagName("IDOC");
            for (int g =0; g< id.getLength(); g++)
            {

                root = id.item(g);          
                headerNodes = root.getChildNodes();


                for(int j =0; j<headerNodes.getLength(); j++)
                {   
                    headerItem = headerNodes.item(j);
                    childNodes=headerItem.getChildNodes();

                    for(int k=0;k<childNodes.getLength();k++)
                    {
                        childItem=childNodes.item(k);
                        childNodes1=childItem.getChildNodes();


                        if((childItem.getNodeName().equalsIgnoreCase("E1LFB1M"))||(childItem.getNodeName().equalsIgnoreCase("E1LFBKM")))
                        {
                            childItem.getParentNode().removeChild(childItem);
                            System.out.println("in if stmt");



                        }

                    }



                }

            }
            DOMSource dom = new DOMSource(docIn);
            StreamResult result = new StreamResult(out);
            transformer.transform(dom, result);
        }
        catch(Exception e)
        {
            System.out.println("execute method"+e.getMessage());
        }
    }

}
import java.io.FileInputStream;
导入java.io.FileOutputStream;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Document;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
公共类CL_RGTIS_CREMAS_DWM_过滤器{
/**
*@param args
*/
公共静态void main(字符串[]args)
{
CL_RGTIS_CREMAS_DWM_FILT domParse=新的CL_RGTIS_CREMAS_DWM_FILT();
尝试
{
FileInputStream in=newfileinputstream(“C:/Users/Home/Downloads/Test1.xml”);
FileOutputStream out=新的FileOutputStream(“C:/Users/Home/Downloads/out.xml”);
执行(in,out);
}
捕获(例外e)
{
System.out.println(“捕获异常”+e.getMessage());
}
}
public void execute(FileInputStream-in,FileOutputStream-out)
{
尝试
{
TransformerFactory TransformerFactory=TransformerFactory.newInstance();
Transformer Transformer=transformerFactory.newTransformer();
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
//忽略文档中的空白
setIgnoringElementContentWhitespace(true);
/*解析器知道名称空间*/
factory.setNamespaceAware(true);
DocumentBuilder builderel=factory.newDocumentBuilder();
documentdocin=builderel.parse(in);
节点根,headerItem=null,childItem=null,childItem1=null;
节点列表id,headerNodes=null,childNodes=null,childNodes1=null;
id=docIn.getElementsByTagName(“IDOC”);
对于(int g=0;gfor(int j=0;j在k循环中,代码删除了第k个childItem。我完全不知道NodeList是否由实际的DOM节点支持。您可以尝试递减k,这样就不会无意中跳过for的
k++
上的下一项

在任何情况下
k
都会在k减小时迭代一次

         childItem.getParentNode().removeChild(childItem);
         --k;

当然,一个更便携、更安全的解决方案应该更好;在循环中收集要删除的项目列表。

假设有6个带有E1LfBKM标记的标记,那么它在if块中只出现4次,其余2次被忽略。但实际上,它应该进入if语句6次。这就是我说的情况s、

您能否解释一下
在相同条件下对某些情况有效,而在某些情况下不起作用
。这些情况是什么?if
语句似乎没有什么问题。它将删除这些名称下面3层的任何节点。我们需要更多信息来帮助您。它适用于哪些情况?W它不适用于什么情况?输入和输出使您更容易了解您正在谈论的内容,您只需编写:
(childItem.getNodeName().equalsIgnoreCase(“E1LFB1M”)| | childItem.getNodeName().equalsIgnoreCase(“E1LFBKM”)
,而不是((childItem.getNodeName().equalsIgnoreCase(“E1LFB1M”)))|(childItem.getNodeName().equalsIgnoreCase().equalsIgnoreCase(“E1LFBKM”))。但我不理解那些不起作用的情况!!您没有提供足够的信息来帮助您。但是,有一件事可能是您做错了:如果您使用整数索引从列表中获取项目(例如
childNodes.item(k)
),然后删除一个项,所有剩余项的索引将下移,代码需要进行相应调整,以便在单步执行时不会遗漏某个项。