现在我保留在xml
下的预定义res>raw>first.xml
很少,我会在运行时获取并显示如下数据:
NodeList nodes = MainActivity.commonmethod.GetDocumentFile(ProductActivity.this,_intRowID).getElementsByTagName("string");
for (int i = 0; i < nodes.getLength(); i++) {
Element e = (Element)nodes.item(i);
e.normalize();
_ArrProductName.add( MainActivity.commonmethod.getValue(e, "string"));
}
使用文档获取XML文件(Plist文件)的方法
public Document GetDocumentFile(Context context, int rawID) {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
DocumentBuilder builder = null;
try {
builder = builderFactory.newDocumentBuilder();
document = builder.parse(context.getResources().openRawResource(
rawID));
document.getDocumentElement().normalize();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return document;
}
getValue方法
public String getValue(Element item, String str) {
NodeList n = item.getElementsByTagName(str);
try {
StringWriter sw = new StringWriter();
Transformer serializer = TransformerFactory.newInstance().newTransformer();
serializer.transform(new DOMSource(n.item(0)), new StreamResult(sw));
String result = sw.toString();
System.out.println("result="+result);
} catch (Exception e) {
e.printStackTrace();
}
return CommonMethod.getElementValue(n.item(0));
}
public final static String getElementValue(Node elem) {
Node kid;
if (elem != null) {
if (elem.hasChildNodes()) {
for (kid = elem.getFirstChild(); kid != null; kid = kid
.getNextSibling()) {
if (kid.getNodeType() == Node.TEXT_NODE) {
return kid.getNodeValue();
}
}
}
}
return "";
}
的test.xml
<?xml version="1.0" encoding="UTF-8"?>
<array>
<!-- PrdocuName -->
<string>Android ICS 4.0™</string>
<!-- PrdocutDescription -->
<string>Mobile</string>
<!-- PrdocuImage -->
<string>Mobile.png</string>
<!-- PrdocuAddress -->
<string>url</string>
<!-- Conversion -->
<integer>400</integer>
<!-- ThicknessNames -->
<string>skim</string>
<!-- ThicknessValues -->
<string>1</string>
<!-- LongDescription -->
<string>Android is the market leader in terms of total number of device sold and soon it will be leader in terms of total number of application available in the market.</string>
</array>
以上整个代码工作低于4.0但不高于4.0,getElementsByTagName`返回高于4.0的null结果。
结果低于4.0
<?xml version="1.0" encoding="UTF-8"?><string>Android ICS 4.0™</string>
结果高于4.0
<?xml version="1.0" encoding="UTF-8"?>
在4.0以上测试时, String tag
缺失,
答案 0 :(得分:0)
最后我实现了,在getvalue
函数内进行了更改;
更改代码:
public String getValue(Element item, String str) {
String strResponse="";
Node kid;
if(item!=null)
{
if(item.hasChildNodes())
{
for(kid=item.getFirstChild(); kid!=null; kid =kid.getNextSibling())
{
if (kid.getNodeType() == Node.TEXT_NODE) {
strResponse =kid.getNodeValue();
return strResponse;
}
}
}else
{
NodeList n = item.getElementsByTagName(str);
n = item.getChildNodes();
if(((Node) n.item(0))!=null)
{
if(((Node) n.item(0)).getNodeValue() !=null)
{
strResponse =((Node) n.item(0)).getNodeValue();
return strResponse;
}else
{
strResponse ="";
}
}
}
}
return strResponse;
}
它完美无缺!