2011-09-19 18 views
0

我在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

+1

您的变压器为空。我会建议在调试器中运行它,并将模拟器上的行为与本机版本的行为进行比较。 –

+0

我用扫描仪打印xml和xsl文件的内容。一切都好。但是这一行:变压器变压器= tFactory.newTransformer(srcXsl);对变换器对象返回null。 – gtiwari333

+1

也许这会有帮助吗?也许Transformer类缺少你的Android SDK? http://stackoverflow.com/questions/5533280/creating-an-xml-document-in-android –

回答

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"> 

,问题就解决了。

但仍然不知道为什么这会导致错误。

相关问题