大家好,感谢您的时间和帮助。 我试图解析“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>
我做错了什么? 甚至有可能吗?
答案 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)