java中特定元素的XML解析

java中特定元素的XML解析,java,xml,Java,Xml,最近,我试图解析一个XML文件,对其进行一些测试 我设法读取了XML文件,但我很难找到我想要读取的元素 我的XML文件如下所示: <Information1> <Information1> Lot of elements here <Info2> <Info3> <BlockElement1> <sBlockElement1> sElement1 </sBlockElement1>

最近,我试图解析一个XML文件,对其进行一些测试

我设法读取了XML文件,但我很难找到我想要读取的元素

我的XML文件如下所示:

<Information1>
 <Information1> Lot of elements here
 <Info2>
  <Info3> 
<BlockElement1> 
     <sBlockElement1> sElement1 </sBlockElement1>
     <sBlockElement2> sElements2 </sBlockElement2>
     <sBlockElement2>  sElements2 </sBlockElement2> !it has the same name but different values than the one above
</BlockElement1>
<BlockElement1> 
     <sBlockElement1> sElement1 </sBlockElement1>
     <sBlockElement2> sElements2 </sBlockElement2>
     <sBlockElement2>  sElements2 </sBlockElement2> !it has the same name but different values than the one above
</BlockElement1>
<BlockElement1> 
     <sBlockElement1> sElement1 </sBlockElement1>
     <sBlockElement2> sElements2 </sBlockElement2>
     <sBlockElement2>  sElements2 </sBlockElement2> !it has the same name but different values than the one above
</BlockElement1>
</Info3></Info2></Information1></Information1>

这里有很多元素
选择1
选择2
sElements2!它与上面的名称相同,但值不同
选择1
选择2
sElements2!它与上面的名称相同,但值不同
选择1
选择2
sElements2!它与上面的名称相同,但值不同
我试图访问BlockElement 1并从sBlockElement(I)中提取数据,其中I=1,2

我的代码:

public static void main(String[] args) {
    try {
        Audiogramcurve aud=new Audiogramcurve();
        File fXmlFile = new File("C:\\Users\\UserNamer\\Desktop/My.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder;
        dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);
        doc.getDocumentElement().normalize();

        System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

        NodeList nList = doc.getElementsByTagName("Info3");
            for(int i=0;i<nList.getLength();i++) {
                Node nNode = nList.item(i);
                 System.out.println("\nCurrent Element :" + nNode.getNodeName());

                        NodeList nListPoints = doc.getElementsByTagName("BlockElement1");

                         for(int tT=0;tT<nListPoints.getLength();tT++) {
                                Node nNodePoint = nListPoints.item(tT);
                                System.out.println(nNodePoint.getNodeName());
                                NodeList audMesList=doc.getElementsByTagName("sBlockElement1");
                                NodeList tonPointList=doc.getElementsByTagName("sBlockElement2");
                                //System.out.println(tonPointList.getLength());
                                for(int audI=0;audI<tonPointList.getLength();audI++) {
                                    Node nNodeAud = tonPointList.item(audI);
                                    System.out.println(nNodeAud.getNodeName());                                 
                                }


                     }
                 }


    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
} `
publicstaticvoidmain(字符串[]args){
试一试{
Audiogramcurve aud=新的Audiogramcurve();
File fXmlFile=新文件(“C:\\Users\\UserNamer\\Desktop/My.xml”);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
文档生成器dBuilder;
dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
System.out.println(“根元素:+doc.getDocumentElement().getNodeName());
NodeList nList=doc.getElementsByTagName(“Info3”);

对于(int i=0;i),在XML中似乎没有任何命名空间,所以你应该考虑使用XPath,因为它是(至少对我来说)如此容易使用!

下面是一个我认为很有帮助的例子:

XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "/Information1/Information1/Info2/Info3/BlockElement1/";

NodeList nodeList = (NodeList) xPath.evaluate(expression, document, XPathConstants.NODESET);

只要您在xml中没有名称空间,就可以使用XPATH。您是wright,但在本例中,他似乎没有名称空间。感谢您的观点!我编辑了我的答案!我并没有说这不是解决问题的方法-这只是一个讨论:)使用XPATH仍然“简单”对于名称空间,如果您编写了一些不受现成支持的自定义调整,没有人知道JDK为什么这么做:p非常感谢您的回答。我将尝试使用Xpath!@MikeS。如果您发现有帮助的答案,请勾选绿色的“勾选”!:)