Android xsl转换空指针,但在桌面上工作
问题描述:
我在android上使用xslt。 Users.xml文件:Android xsl转换空指针,但在桌面上工作
<?xml version="1.0" encoding="utf-8"?>
<users>
<user>
<fname>somename</fname>
<hobbies>
<hobby>Movie</hobby>
<hobby>Trekking</hobby>
</hobbies>
</user>
</users>
的users.xsl文件
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="users/user">
<h2>
<xsl:value-of select="fname" />
</h2>
<h3>Hobbies :</h3>
<xsl:for-each select="hobbies/hobby">
<xsl:value-of select="." />
<xsl:if test="position() != last()">
<xsl:text> , </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Android的布局userview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView
android:id="@+id/userwebview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
Android的活动
public class UserDisplayActivity extends Activity {
WebView userView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.userwebview);
userView = (WebView) findViewById(R.id.userwebview);
loadTransformedHtml();
}
private void loadTransformedHtml() {
try {
String htmlTransformed=UserXmlTransform.getTransformedHtml();
userView.loadData(htmlTransformed, "text/html", "utf-8");
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
而且UserXmlTran sform类
public class UserXmlTransform {
static final String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
static final File xmlFileF = new File(sdPath+"/users.xml");
static final File xsltFileF = new File(sdPath+"/users.xsl");
public static String getTransformedHtml() throws TransformerException {
Source srcXml = new StreamSource(xmlFileF);
Source srcXsl = new StreamSource(xsltFileF);
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(srcXsl);
transformer.transform(srcXml, result);
return writer.toString();
}
}
转型成功与UserXmlTransform.java代码运行,而测试,Java项目具有完全相同的XML和XSL文件。
在Android应用程序中,文件位于适当的位置。 但在运行空指针异常在行
transformer.transform(srcXml, result);
UserXmlTransform.java的
抛出。为什么这个变换器对象在android中变为null。
我找不出什么问题。请帮帮我。 [新增]我使用的SDK 2.2
答
我做了以下变化users.xsl
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
要
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
,问题就解决了。
但仍然不知道为什么这会导致错误。
您的变压器为空。我会建议在调试器中运行它,并将模拟器上的行为与本机版本的行为进行比较。 –
我用扫描仪打印xml和xsl文件的内容。一切都好。但是这一行:变压器变压器= tFactory.newTransformer(srcXsl);对变换器对象返回null。 – gtiwari333
也许这会有帮助吗?也许Transformer类缺少你的Android SDK? http://stackoverflow.com/questions/5533280/creating-an-xml-document-in-android –