2

我正在使用 java stax XMLStreamReader 来读取 xml。我想抓取某些内部节点的整个字符串。

XML:

<example>
   <ignoreMe>
      <bla></bla>
   </ignoreMe>
   <getMe>
      <data></data>
   </getMe>
</example>

我只想能够在字符串中获取整个内部 getMe 节点。IE:

   <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")) {
             //??????????????????
4

2 回答 2

3

我上周开始学习 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);

此代码将为您获取所有内部节点和文本内容,并将其存储到字符串中。IE:

<getMe>
      <data>test</data>
</getMe>

但是,这段代码非常“丑陋”,而且肯定不是您正在寻找的最佳解决方案,JDOM 可能更适合您的需求。

于 2011-04-04T07:56:11.750 回答
1

检查这个

检查方法 parser.getElementText()

高温高压

这将为您提供内部文本,您可以通过正常方法手动添加开始和结束名称。因为 XML 是一个严格的标准,所以你没问题。

于 2010-11-10T21:29:46.117 回答