簡體   English   中英

Java XML搜索錯誤

[英]Java XML search error

您好,我收到了意外錯誤,請幫幫我!

我想搜索一個人的名字,並顯示有關他的所有可用信息。

在下面的代碼中,我試圖找到名字叫Ivan的人,並且此“翻譯”是從stackoverflow中的其他xml主題復制的,作為區分大小寫的選項。

public static void main(String[] args) {
    try {
        DocumentBuilderFactory factory = DocumentBuilderFactory
                .newInstance();
        Document doc = factory.newDocumentBuilder().parse(
                new File("staff.xml"));

        XPathFactory xFactory = XPathFactory.newInstance();
        XPath xPath = xFactory.newXPath();
        XPathExpression exp = xPath
                        .compile("/staff/person/name/firstName[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'Ivan')]");

        NodeList nl = (NodeList) exp.evaluate(doc.getFirstChild(),
                XPathConstants.NODESET);

        for (int index = 0; index < nl.getLength(); index++) {
            Node node = nl.item(index);
            System.out.println(node.getTextContent());
        }
    } catch (Exception ex) {
        Logger.getLogger(TestXML05.class.getName()).log(Level.SEVERE, null,
                ex);
    }

}

這是我的XML示例文件:

<?xml version="1.0" encoding="utf-8"?>

<staff>
    <person id="1" role="chief">
    <name>
        <firstName>Ivan</firstName>
        <lastName>Popov</lastName>
    </name>
    <phone>
        <phoneOne>0273090909</phoneOne>
        <phoneTwo>0878123456</phoneTwo>
    </phone>
    <email>i.popov@fdiba.tu-sofia.bg</email>
    <room>10202</room>
    <title>Dr.Ing.</title>
</person>
<person id="2" role="dozent">
    <name>
        <firstName>Georgi</firstName>
        <lastName>Ivanov</lastName>
    </name>
    <phone>
        <phoneOne>029988115</phoneOne>
        <phoneTwo>0888123333</phoneTwo>
    </phone>
    <email>g.ivanov@fdiba.tu-sofia.bg</email>
    <room>10203</room>
    <title>Dr.Ing.</title>
</person>
<person id="3" role="assistent">
    <name>
        <firstName>Petur</firstName>
        <lastName>Kirilov</lastName>
    </name>
    <phone>
        <phoneOne>028773455</phoneOne>
        <phoneTwo>0898448576</phoneTwo>
    </phone>
    <email>p.kirilov@fdiba.tu-sofia.bg</email>
    <room>10308</room>
    <title>Ing.</title>
</person>
</staff>

您的xpath表達式似乎不正確。 您需要將xpath表達式更改為/staff/person/name/firstName[contains(text(),'Georgi')]/../.. 這將選擇與名字為Georgi的人相對應的人節點。

public static void main(String[] args) {

    try {
        DocumentBuilderFactory factory = DocumentBuilderFactory
                .newInstance();
        Document doc = factory.newDocumentBuilder().parse(
                new File("src/resources/staff.xml"));

        XPathFactory xFactory = XPathFactory.newInstance();
        XPath xPath = xFactory.newXPath();
        XPathExpression exp = xPath
                .compile("/staff/person/name/firstName[contains(text(),'Georgi')]/../..");

        NodeList nl = (NodeList) exp.evaluate(doc,
                XPathConstants.NODESET);

        for (int index = 0; index < nl.getLength(); index++) {
            Node node = nl.item(index);
            if (node.hasAttributes()) {
                Attr attr = (Attr) node.getAttributes().getNamedItem("role");
                if (attr != null) {
                    String attribute= attr.getValue();                      
                    System.out.println("Person role : " + attribute);                      
                }
            }

            System.out.println(node.getTextContent());
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM