2

对于 XML 关键字搜索项目,用户可以搜索 XML 代码中的任何值:

<?xml version="1.0" encoding="UTF-8"?>
<company>
<staff id="1001">
    <firstname>sachin</firstname>
    <lastname>tendulkar</lastname>
    <nickname>TON</nickname>
    <salary>100000</salary>
</staff>
<staff id="2001">
    <firstname>MS</firstname>
    <lastname>Dhoni</lastname>
    <nickname>MSD</nickname>
    <salary>200000</salary>
</staff>    
<staff id="3001">
    <firstname>yuraj</firstname>
    <lastname>singh</lastname>
    <nickname>yuvi</nickname>
    <salary>200000</salary>
</staff>
</company>

如果用户搜索20000,结果将在 ID 中可用,1001因此2001输出应如下所示:

  ms 
  dhoni
   msd
  200000

  yuraj
 singh
  yuvi
 20000

我想在Java中做到这一点。这是我到目前为止所写的:

package a;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;

public class TestJava
{

    public static void TestJava(String s) {

        try {

            File fXmlFile = new File("E:/xml/xml/src/a/test.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);


            doc.getDocumentElement().normalize();

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

            NodeList nList = doc.getElementsByTagName("staff");

            System.out.println("----------------------------");

            for (int temp = 0; temp < nList.getLength(); temp++) {

                Node nNode = nList.item(temp);

                System.out.println("\nCurrent Element :" + nNode.getNodeName());

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                    Element eElement = (Element) nNode;
                    if(eElement.getElementsByTagName("salary").item(0).getTextContent().equals(s))
                    {
                        System.out.println("Staff id : " + eElement.getAttribute("id"));
                        System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
                        System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
                        System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
                        System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
4

2 回答 2

1

这看起来像是 XPath 查询的工作!

    File fXmlFile = new File("test.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);

    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();

    // This XPath query will give you a list of only those <staff> elements
    // which contain a <salary>200000</salary> element
    XPathExpression expr = xpath.compile("/company/staff/salary[text()=\"200000\"]/..");
    NodeList result = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);

    NodeList nodes = (NodeList) result;
    for (int i = 0; i < nodes.getLength(); i++) {
        Element eElement = (Element) nodes.item(i);
        String id = eElement.getAttribute("id");
        System.out.println("Staff id : " + eElement.getAttribute("id"));
        System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
        System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
        System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
        System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
    }
于 2013-01-30T20:48:19.857 回答
0

这可能不是最好和最短的方法,但你可以这样做: -

  1. 创建一个 Player 类并将名字、姓氏、昵称、薪水设置为变量并生成 getter/setter。
  2. 读取 xml 文件并使用 Jaxb 将您的 xml 转换为对象。一个很好的开始链接
  3. 现在使用您现在在这些对象中搜索的对象
    
    object.getActive().compareTo(salary)//compare the player object salary with desires salary in a loop
    

我希望这有帮助!

于 2013-01-30T20:42:03.867 回答