如何传递停放的文件?

时间:2014-03-02 19:08:39

标签: java android parsing dom xpath

大家好,感谢您的时间和帮助。 我试图解析“res / raw”文件夹中的xml文件,并将结果传递给其他类来使用它。 我陷入困境,无法找到任何解决方案,我试图学习编程,因此,整个代码可能是错误的,我从一开始就灾难性地失败了。

这是解析器,它从raw文件夹中获取文档并返回已解析的文档。

import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import android.app.Activity;

public class Pars extends Activity{

    public Document doc(){

          InputStream is = getResources().openRawResource(R.raw.talechap01);

        Document docout = null;

         DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
          DocumentBuilder builder = null;
        try {
            builder = domFactory.newDocumentBuilder();
            docout = builder.parse(is);

        } catch (ParserConfigurationException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return docout;
    }
}

这个类获取解析后的文档并使用xpath查找一些内容并在返回时传递它。 我无法从“Pars”类中传递解析后的文档“docout”

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class Commanders {

    public static String getStory(String spage) {

          XPathExpression expr;
          XPath xpath = XPathFactory.newInstance().newXPath();

           Object result = null;
           String num = spage;
           String par = null;
           Document doc = //Here I need the document parsed from the "Pars" class

           try {

           expr = xpath.compile("//decision"+num+"/p//text()");

            result = expr.evaluate(doc, XPathConstants.NODESET);
          }

         catch (XPathExpressionException e) {

             e.printStackTrace();
          }

          NodeList nodes = (NodeList) result;

         for (int i = 0; i < nodes.getLength(); i++) {

           par = nodes.item(i).getNodeValue();

         //  System.out.println(par);

         }
         return par;
      }
}

以下是xml的示例。 我正在尝试根据“decisionXXX”号码获取“

”的内容。

<talechap01>
<Start></Start>
    <decision000 id="000">
        <p> part 1 text</p>
        <p> second row text</p>


        <pick chs= "001" name= "go to decision001"/>
        <pick chs= "002" name= "go to decision002"/>
    </decision000>

    <decision001 id="001">

        <p>parte 2</p>

        <pick chs = "002" name= "go to decision002"/>
        <pick chs = "003" name= "go to decision003"/>

    </decision001>

我做错了什么? 甚至有可能吗?

2 个答案:

答案 0 :(得分:0)

也许我不理解某些东西,但似乎属性“id”是一个决定数字, 我的意思是下一个

  

decision000 id = 000

如果确实如此,那么您可以先查找以id开头的节点,然后按id选择 我现在无法检查它,但它应该工作,尝试下一个表达式:

//*[starts-with(local-name(), 'decision')][@id='your_num_value']

答案 1 :(得分:0)

您需要调整Commanders#getStory(java.lang.String)的函数签名,以便获取额外的doc参数。然后,您可以执行代码,如...

Pars pars = new Pars();

Document doc = pars.doc();
Commanders.getStory(doc, spage)
相关问题