Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在sax解析器中解析xml时,如何获取具有相同名称且没有属性的特定xml标记的值_Java_Xml_Saxparser - Fatal编程技术网

Java 在sax解析器中解析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&

实际上,我试图只获取一个特定节点的值,但节点标记在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>
我只能显示所有的电子邮件地址,但我只想上面提到的一个。需要对代码进行哪些更改

任何在类似情况下工作的人都可以提供帮助 谢谢
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