Java XML解析/查询

Java XML解析/查询,java,xml,Java,Xml,当我使用NodeList nList=doc.getElementsByTagName(“stock”)时,我有这样的XML结构;它返回我3个股票,2个主股票标签和一个在子股票下面。我只想得到两个股票,这是在较高的水平和忽略所有的是在子股票标签 在Java中是否有可能在C#中生成类似LINQ查询的东西,比如只在名称等于“Sony”的地方返回我元素 谢谢 <city> <stock> <name>Sony</name> <

当我使用NodeList nList=doc.getElementsByTagName(“stock”)时,我有这样的XML结构;它返回我3个股票,2个主股票标签和一个在子股票下面。我只想得到两个股票,这是在较高的水平和忽略所有的是在子股票标签

在Java中是否有可能在C#中生成类似LINQ查询的东西,比如只在名称等于“Sony”的地方返回我元素

谢谢

<city>
   <stock>
     <name>Sony</name>
   </stock>
   <stock>
     <name>Panasonic</name>
     <substocks>
          <stock>
             <name>Panasonic Shop 2</name>
          </stock>
     </substocks>
   </stock>
</city>

索尼
松下
松下2号店

看看XPath及其java实现。另一种可能的方法是使用JAXB解析XML,使用LambdaJ解析操作对象列表。

我建议您与包一起使用:

然后:

final NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
还有一个库具有强大的XPath导航功能:

import org.dom4j.Document;
import org.dom4j.io.SAXReader;

SAXReader reader = new SAXReader();
Document document = reader.read("test.xml");
List list = document.selectNodes("/city/stock/name[text()='Sony']");
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
    // TODO: place you logic here
}
更多示例是使用一行线尝试(参见此):

Collection<XML> found = new XMLDocument("your document here").nodes(
  "/city/stock/name[text()='Sony']"
);
Collection found=new XMLDocument(“此处的文档”)。节点(
“/city/stock/name[text()='Sony']”
);

他只需要name=Sony的元素,所以表达式应该是
/city/stock[name='Sony']
对吗?
Collection<XML> found = new XMLDocument("your document here").nodes(
  "/city/stock/name[text()='Sony']"
);