Java XML搜索错误
您好,我遇到一个意外错误,请帮我解决 我想搜索一个人的名字,并显示他所有可用的信息 在下面的代码中,我试图找到名为Ivan的人,这个“translate”是从stackoverflow中的其他xml主题复制的,作为一个incase-sensitive选项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
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()
表达式。