Java 在sax解析器中解析xml时,如何获取具有相同名称且没有属性的特定xml标记的值
实际上,我试图只获取一个特定节点的值,但节点标记在xml文档中的许多地方。下面是xml片段Java 在sax解析器中解析xml时,如何获取具有相同名称且没有属性的特定xml标记的值,java,xml,saxparser,Java,Xml,Saxparser,实际上,我试图只获取一个特定节点的值,但节点标记在xml文档中的许多地方。下面是xml片段 <t:Address xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"><t:Name>XYZ Conference Rooms</t:Name><t:EmailAddress>XYZConferenceRooms@abc.co.in</t:EmailAddress&
<t:Address xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"><t:Name>XYZ Conference Rooms</t:Name><t:EmailAddress>XYZConferenceRooms@abc.co.in</t:EmailAddress><t:RoutingType>SMTP</t:RoutingType><t:MailboxType>PublicDL</t:MailboxType></t:Address><t:Address xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"><t:Name>ABC Conference Rooms</t:Name><t:EmailAddress>ABCConferenceRooms@abc.co.in</t:EmailAddress><t:RoutingType>SMTP</t:RoutingType><t:MailboxType>PublicDL</t:MailboxType></t:Address>
我只能显示所有的电子邮件地址,但我只想上面提到的一个。需要对代码进行哪些更改
任何在类似情况下工作的人都可以提供帮助
谢谢
Mike当您在两个地址节点中使用相同的名称空间时,它们也将继承到电子邮件节点。因此名称空间没有差异,您无法找到确切的节点来获取所需内容。如果您知道电子邮件节点(第二个电子邮件节点等)的位置,则可以在startElement()中设置计数器当计数器找到第二个电子邮件节点时,然后获取其中的相关文本。您是否在工作中尝试了SAX XML解析器。如果没有,那就试一下 您的XML文件是:
<?xml version="1.0"?>
<company>
<staff>
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff>
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>
您的输出是:
Start Element :company
Start Element :staff
Start Element :firstname
First Name : yong
End Element :firstname
Start Element :lastname
Last Name : mook kim
End Element :lastname
Start Element :nickname
Nick Name : mkyong
End Element :nickname
Start Element :salary
Salary : 100000
End Element :salary
End Element :staff
Start Element :staff
Start Element :firstname
First Name : low
End Element :firstname
Start Element :lastname
Last Name : yin fong
End Element :lastname
Start Element :nickname
Nick Name : fong fong
End Element :nickname
Start Element :salary
Salary : 200000
End Element :salary
End Element :staff
End Element :company
谢谢Sanjaya。。我现在会试试,让你知道这是否有效。嗨,我只尝试了SAX解析器,因为如果你在android上创建应用,这是最好的。我也试过上面的例子。我知道它是有效的,但问题是我只想要一个值作为字符串,而不是全部。我想从上面的例子中解释一下,我只想返回(尹芳),但不想返回mook kim或标签中的任何其他姓名。我也尝试了计数器,但不确定如何实现。我试着把if(counterfore)放在这里,或者说您也实现了regex或pattern,就像您想在标记中添加一些特定的名称一样
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ReadXMLFile {
public static void main(String argv[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;
public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
if (qName.equalsIgnoreCase("FIRSTNAME")) {
bfname = true;
}
if (qName.equalsIgnoreCase("LASTNAME")) {
blname = true;
}
if (qName.equalsIgnoreCase("NICKNAME")) {
bnname = true;
}
if (qName.equalsIgnoreCase("SALARY")) {
bsalary = true;
}
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
System.out.println("End Element :" + qName);
}
public void characters(char ch[], int start, int length) throws SAXException {
if (bfname) {
System.out.println("First Name : " + new String(ch, start, length));
bfname = false;
}
if (blname) {
System.out.println("Last Name : " + new String(ch, start, length));
blname = false;
}
if (bnname) {
System.out.println("Nick Name : " + new String(ch, start, length));
bnname = false;
}
if (bsalary) {
System.out.println("Salary : " + new String(ch, start, length));
bsalary = false;
}
}
};
saxParser.parse("c:\\file.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Start Element :company
Start Element :staff
Start Element :firstname
First Name : yong
End Element :firstname
Start Element :lastname
Last Name : mook kim
End Element :lastname
Start Element :nickname
Nick Name : mkyong
End Element :nickname
Start Element :salary
Salary : 100000
End Element :salary
End Element :staff
Start Element :staff
Start Element :firstname
First Name : low
End Element :firstname
Start Element :lastname
Last Name : yin fong
End Element :lastname
Start Element :nickname
Nick Name : fong fong
End Element :nickname
Start Element :salary
Salary : 200000
End Element :salary
End Element :staff
End Element :company