解释自己的最好方法是向您展示一段代码:
这是我正在解析的XML文件:
<module>
<name>name1</name>
<type>type</type>
<content>
<p>This is some piece of code that should be treated as a full string, even that 'p' tag, because I want to use all content inside p tag for a webview in android.
</p>
<h1>This is a big classy title in html</h1>
</content>
</module>
正如你可以在p标签中看到的,基本上我想得到< content>标记的内容并将其保存到要处理的字符串中.所以最后,我希望有一个初始化的字符串,如:
字符串内容=“< p>这是一些…….< / p>< h1>这是……< / h1>”;
这是我用来获取的代码< name>,< type>值:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(contingut);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("module");
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
Element element = (Element) node;
if(element.getNodeType() == Element.ELEMENT_NODE){
System.out.println(getValue("name",element));
System.out.println(getContent("content",element));
}
}
private static String getValue(String tag, Element element) {
String value="";
try {
NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = (Node) nodes.item(0);
value=node.getNodeValue();
} catch (Exception e){
value=null;
}
return value;
}
因此,例如,在解析时,Name正确打印name1,但内容返回空白.
任何想法如何将< content>的内容作为字符串?
谢谢.
编辑
private static String getContent(String tag, Element element) {
String value="";
try {
Node nodes = element.getElementsByTagName(tag).item(0);
value = nodes.getTextContent();
} catch (Exception e){
value=null;
}
return value;
}
Log.d("debugging",getContent("content",element));
这是打印这个:
这件事……
它似乎没有返回字符串< p>.
最佳答案 由于
getTextContent没有返回任何标记,我认为使用任何Node方法是不可能的.
我看到的唯一方法(如果你想使用DocumentBuilder)是,你编写了一些代码来重建节点列表中的字符串(迭代节点和节点属性).
作为我的意思的小草图:(只有javalike伪代码)
string rebuild(NodeList nodeList) {
string result = "";
for (Node n : nodeList) {
result += "<" + node.getNodeName() + " ";
NamedNodeMap aMap = node.getAttributes();
if (aMap != null) {
int aMapLength = aMap.getLength();
for (int i=0; i<aMapLength; ++i) {
Node a = aMap.item(i);
result += a.getNodeName() + "=" + a.getValue() + " ";
}
}
NodeList nList = node.getChildNodes();
if (nList == null) {
result += "/>";
} else {
result += ">";
result += rebuild(nList);
result += "</" + node.getNodeName() + ">";
}
}
return result;
}
您还可以创建xsd文件并使用xjc(JAXB)来创建Java类.关于如何执行此操作有很多很好的教程(取决于您的IDE).
然后你就可以随心所欲地为JAXB编组/解组所有内容.
另一种方法是你实现自己的SaxHandler,并使用SAXParser和SAXParserFactory,这将是一些工作.