![](/img/trans.png)
[英]How to skip the parent tag, based on the value of a child tag in XML Parsing using SAX Parser
[英]How to get value of a particular xml tag having same names and no attribute while parsing xml in sax parser
實際上,我試圖僅獲取一個特定節點的值,但是節點標簽在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: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>
事情是我只想要上面xml中的值(ABCConferenceRooms@abc.co.in)。 上面只是一個代碼片段,我們在xml中有10個電子郵件地址值。
當我在解析器中執行此操作時
String value;
String url;
String confName;
String confEmail;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
value = qName;
confEmail = qName;
confName = qName;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (value.equals("Value")) {
String OperationName1Text = new String(ch, start, length);
info.setValue(OperationName1Text);
Log.d("URL", OperationName1Text);
}
else if (confName.equals("t:EmailAddress")) {
String getEmail = new String(ch, start, length);
info.setEmail(getEmail);
Log.d("Email", getEmail);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
value = qName;
confEmail = qName;
confName = qName;
}
我只能顯示所有電子郵件地址,但我只想要上面提到的一個。 需要對代碼進行哪些更改。
任何在類似情況下工作的人都可以提供幫助
當您在兩個地址節點中使用相同的名稱空間時,它們也將繼承到電子郵件節點。因此名稱空間沒有區別,您找不到確切的節點來獲得所需的名稱。如果您知道電子郵件節點的位置(第二個電子郵件節點等),那么您可以在startElement()中擁有一個計數器,當計數器找到第二個電子郵件節點時,便會在其中獲取相關文本。
您是否為您的工作嘗試過SAX XML Parser。 如果沒有,那么嘗試一次...
您的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>
XML解析器的JAVA CODE
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.