首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java XML解析/查询

Java XML解析/查询
EN

Stack Overflow用户
提问于 2012-03-18 22:05:30
回答 4查看 461关注 0票数 3

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

有没有可能在Java中用C#做一些像LINQ query这样的东西,比如只返回name等于"Sony“的元素。

谢谢!

代码语言:javascript
复制
<city>
   <stock>
     <name>Sony</name>
   </stock>
   <stock>
     <name>Panasonic</name>
     <substocks>
          <stock>
             <name>Panasonic Shop 2</name>
          </stock>
     </substocks>
   </stock>
</city>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-18 22:14:01

我建议您在javax.xml.xpath包中使用XPath

代码语言:javascript
复制
final InputStream is = new FileInputStream('your.xml');

final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
final DocumentBuilder builder = factory.newDocumentBuilder();
final Document doc = builder.parse(is);
final XPathFactory xPathfactory = XPathFactory.newInstance();
final XPath xpath = xPathfactory.newXPath();
final XPathExpression expr = xpath.compile("/city/stock/name[text()='Sony']");

然后:

代码语言:javascript
复制
final NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
票数 3
EN

Stack Overflow用户

发布于 2012-03-18 22:13:06

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

票数 1
EN

Stack Overflow用户

发布于 2012-03-19 00:07:38

还有一个带有强大的XPath导航功能的dom4j库:

代码语言:javascript
复制
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
}

更多的例子是here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9758944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档