我有这样的XML结构,当我使用NodeList nList =doc.getElementsByTagName(“stock”)时,它返回3个股票,2个主股票标签和一个子股票标签。我只想得到两只股票,这是在较高的水平,并忽略所有的子股票标签。
有没有可能在Java中用C#做一些像LINQ query这样的东西,比如只返回name等于"Sony“的元素。
谢谢!
<city>
<stock>
<name>Sony</name>
</stock>
<stock>
<name>Panasonic</name>
<substocks>
<stock>
<name>Panasonic Shop 2</name>
</stock>
</substocks>
</stock>
</city>发布于 2012-03-18 22:14:01
我建议您在javax.xml.xpath包中使用XPath:
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']");然后:
final NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);发布于 2012-03-18 22:13:06
看看XPath和它的java实现JXPath。另一种可能的方法是使用JAXB解析XML,并使用LambdaJ操作对象列表。
发布于 2012-03-19 00:07:38
还有一个带有强大的XPath导航功能的dom4j库:
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
https://stackoverflow.com/questions/9758944
复制相似问题