我正在研究android上的xslt。 users.xml文件:
<?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 layout 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();
}
}
}
和UserXmlTransform类
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代码成功运行转换,同时作为具有完全相同的xml和xsl文件的java项目进行测试。
在Android应用中,文件位于适当的位置。 但是在运行NullPointer Exception时会抛出
行transformer.transform(srcXml, result);
UserXmlTransform.java的。为什么这个变换器对象在android中变为null。
我无法弄清楚什么是问题。请帮我。 [已添加]我正在使用SDK 2.2
答案 0 :(得分:1)
我在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">
问题解决了。
但仍然不知道为什么会导致错误。