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 stax获取内部节点的字符串_Java_Xml_Stax - Fatal编程技术网

java stax获取内部节点的字符串

java stax获取内部节点的字符串,java,xml,stax,Java,Xml,Stax,我正在使用JavaStaxXMLStreamReader来读取xml。我想获取某些内部节点的整个字符串 XML: 检查 检查parser.getElementText()方法 嗯 这将获得内部文本,您可以通过常规方法手动添加起始和结束名称。因为XML是一个严格的标准,所以您很好。我上周开始学习StaX,但如果您仍在寻找问题的答案,这可能会帮助您: XMLInputFactory xmlif = XMLInputFactory.newInstance(); xmlif.setPro

我正在使用JavaStaxXMLStreamReader来读取xml。我想获取某些内部节点的整个字符串

XML:

检查

检查parser.getElementText()方法


这将获得内部文本,您可以通过常规方法手动添加起始和结束名称。因为XML是一个严格的标准,所以您很好。

我上周开始学习StaX,但如果您仍在寻找问题的答案,这可能会帮助您:

    XMLInputFactory xmlif = XMLInputFactory.newInstance();
    xmlif.setProperty(XMLInputFactory.IS_COALESCING, true);
    XMLStreamReader xmlsr;
    String resultat="";
    boolean isGetme=false;

    try {
        xmlsr = xmlif.createXMLStreamReader(new FileReader("lib/toto.xml"));
        int eventType;
        while (xmlsr.hasNext()) {
            eventType = xmlsr.next();
            switch (eventType) {
                case XMLStreamConstants.START_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        isGetme=true;
                    }
                    if(isGetme){
                        resultat+="<"+xmlsr.getLocalName()+">";
                    }
                    break;
                case XMLStreamConstants.CHARACTERS:
                    if(isGetme){
                        resultat+=xmlsr.getText();
                    }
                    break;
                case XMLStreamConstants.END_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                        isGetme=false;
                    }
                    if(isGetme && !xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                    }
                    break;
                default:
                    break;
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (XMLStreamException e) {
        e.printStackTrace();
    }
    System.out.println(resultat);
XMLInputFactory xmlif=XMLInputFactory.newInstance();
setProperty(XMLInputFactory.IS_COALESCING,true);
xmlsr;
字符串result=”;
布尔值isGetme=false;
试一试{
xmlsr=xmlif.createXMLStreamReader(新文件阅读器(“lib/toto.xml”);
int事件类型;
while(xmlsr.hasNext()){
eventType=xmlsr.next();
开关(事件类型){
案例XMLStreamConstants.START_元素:
if(xmlsr.getLocalName().equals(“getMe”)){
isGetme=true;
}
如果(isGetme){
resultat+=“”;
}
打破
大小写XMLStreamConstants.CHARACTERS:
如果(isGetme){
resultat+=xmlsr.getText();
}
打破
案例XMLStreamConstants.END_元素:
if(xmlsr.getLocalName().equals(“getMe”)){
resultat+=“”;
isGetme=false;
}
if(isGetme&!xmlsr.getLocalName().equals(“getMe”)){
resultat+=“”;
}
打破
违约:
打破
}
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(XMLStreamException e){
e、 printStackTrace();
}
System.out.println(resultat);
此代码将获取所有内部节点和文本内容,并将其存储到字符串中。 即:


测试

但是,这段代码非常“难看”,肯定不是您所要寻找的最佳解决方案,JDOM可能更适合您的需要。

这不是我所要寻找的,我的示例xml很简单,但实际上它很复杂,并且包含要引导的注释。加上解析器.getElementText()为我抛出了一个异常。谢谢。。我最终使用了JDOM。
   <getMe>
      <data></data>
   </getMe>
XMLStreamReader parser = factory.createXMLStreamReader(new FileReader(file)); 
for (int event = parser.next();  
event != XMLStreamConstants.END_DOCUMENT;
event = parser.next()) {

    switch (event) {
    case XMLStreamConstants.START_ELEMENT:
        if (parser.getLocalName().equals("GetMe")) {
             //??????????????????
    XMLInputFactory xmlif = XMLInputFactory.newInstance();
    xmlif.setProperty(XMLInputFactory.IS_COALESCING, true);
    XMLStreamReader xmlsr;
    String resultat="";
    boolean isGetme=false;

    try {
        xmlsr = xmlif.createXMLStreamReader(new FileReader("lib/toto.xml"));
        int eventType;
        while (xmlsr.hasNext()) {
            eventType = xmlsr.next();
            switch (eventType) {
                case XMLStreamConstants.START_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        isGetme=true;
                    }
                    if(isGetme){
                        resultat+="<"+xmlsr.getLocalName()+">";
                    }
                    break;
                case XMLStreamConstants.CHARACTERS:
                    if(isGetme){
                        resultat+=xmlsr.getText();
                    }
                    break;
                case XMLStreamConstants.END_ELEMENT:
                    if(xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                        isGetme=false;
                    }
                    if(isGetme && !xmlsr.getLocalName().equals("getMe")){
                        resultat+="</"+xmlsr.getLocalName()+">";
                    }
                    break;
                default:
                    break;
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (XMLStreamException e) {
        e.printStackTrace();
    }
    System.out.println(resultat);
<getMe>
      <data>test</data>
</getMe>