2011-09-19 44 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"> 

,問題就解決了。

但仍然不知道爲什麼這會導致錯誤。

相關問題