Java XML搜索错误

Java XML搜索错误,java,xml,loops,search,Java,Xml,Loops,Search,您好,我遇到一个意外错误,请帮我解决 我想搜索一个人的名字,并显示他所有可用的信息 在下面的代码中,我试图找到名为Ivan的人,这个“translate”是从stackoverflow中的其他xml主题复制的,作为一个incase-sensitive选项 public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory

您好,我遇到一个意外错误,请帮我解决

我想搜索一个人的名字,并显示他所有可用的信息

在下面的代码中,我试图找到名为Ivan的人,这个“translate”是从stackoverflow中的其他xml主题复制的,作为一个incase-sensitive选项

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);
    }

}
publicstaticvoidmain(字符串[]args){
试一试{
DocumentBuilderFactory工厂=DocumentBuilderFactory
.newInstance();
Document doc=factory.newDocumentBuilder().parse(
新文件(“staff.xml”);
XPathFactory xFactory=XPathFactory.newInstance();
XPath=xFactory.newXPath();
xPath表达式exp=xPath
.compile(“/staff/person/name/firstName[包含(translate(text(),'abcdefghijklmnopqrstuvxyz','abcdefghijklmnopqrstuvxyz'),'Ivan')”);
NodeList nl=(NodeList)exp.evaluate(doc.getFirstChild(),
XPathConstants.NODESET);
对于(int index=0;index
这是我的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>

伊凡
波波夫
0273090909
0878123456
我popov@fdiba.tu-索菲亚
10202
林博士。
格奥尔基
伊万诺夫
029988115
0888123333
Givanov@fdiba.tu-索菲亚
10203
林博士。
佩图尔
基里洛夫
028773455
0898448576
Pkirilov@fdiba.tu-索菲亚
10308
惯性导航与制导。

您的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();
    }
}
publicstaticvoidmain(字符串[]args){
试一试{
DocumentBuilderFactory工厂=DocumentBuilderFactory
.newInstance();
Document doc=factory.newDocumentBuilder().parse(
新文件(“src/resources/staff.xml”);
XPathFactory xFactory=XPathFactory.newInstance();
XPath=xFactory.newXPath();
xPath表达式exp=xPath
.compile(“/staff/person/name/firstName[contains(text(),'Georgi')]/../”);
节点列表nl=(节点列表)exp.evaluate(文档,
XPathConstants.NODESET);
对于(int index=0;index
定义
意外错误
。Stacktrace?您确实复制了翻译/不区分大小写的代码,但您似乎不理解它。再次查看
contains()
表达式。