Android XSL преобразование нулевой указатель, но работает на рабочем столе - PullRequest
0 голосов
/ 19 сентября 2011

Я работал на xslt на Android.Файл 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 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 при тестировании в качестве проекта Java с точно таким же файлом XML и XSL.файлы находятся в соответствующем месте.Но во время работы исключение NullPointer генерируется в строке

transformer.transform(srcXml, result); 

файла UserXmlTransform.java.почему этот объект преобразователь стал нулевым в Android.

Я не мог понять, в чем проблема.Помогите мне, пожалуйста.[Добавлено] Я использую SDK 2.2

1 Ответ

1 голос
/ 20 сентября 2011

Я сделал следующее изменение в 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">

И проблема была решена.

Но все еще не знаю, почему это вызвало ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...