Android: конвертируйте xml с помощью xslt - PullRequest
3 голосов
/ 11 ноября 2010

Я хочу преобразовать некоторый xml с помощью xsl-файла и как-то вывести результат (я использую Android Api Level 8).

Моя текущая активность выглядит так, но трансформатор остается нулевым. LogCat выдает System.err с org.apache.harmony.xml.ExpatParser$ParseException, говоря, что xml не правильно сформирован, но я убедился, что это так.

Я обнаружил подсказку в LogCat, которая говорит SystemId Unknown как раз перед сообщением об ошибке выше.

Что я делаю не так?

import java.io.OutputStream;

import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import android.app.Activity;
import android.os.Bundle;

public class XsltTester extends Activity {

    private static String TAG = XsltTester.class.getSimpleName();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {

            Source xmlSource = new StreamSource(this.getResources().openRawResource(R.xml.source));
            Source xsltSource = new StreamSource(this.getResources().openRawResource(R.xml.products));

            TransformerFactory transFact = TransformerFactory.newInstance();
            Transformer trans = transFact.newTransformer(xsltSource);
            OutputStream output = new StringOutputStream();
            StreamResult result = new StreamResult(output);
            trans.transform(xmlSource, result);

        } catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Это xml-файл для преобразования (source.xml)

<?xml version="1.0"?>
<!-- <?xml-stylesheet href="beatle.xsl" type="text/xsl"?> -->
<person>
 <name>
  <firstname>Paul</firstname>
  <lastname>McCartney</lastname>
 </name>
 <job>Singer</job>
 <gender>Male</gender>
</person>

А это соответствующий xsl (products.xsl)

<xsl:template match="child::person">
 <html>
  <head>
   <title>
    <xsl:value-of select="descendant::firstname" />
    <xsl:text> </xsl:text>
    <xsl:value-of select="descendant::lastname" />
   </title>
  </head>
  <body>
   <xsl:value-of select="descendant::firstname" />
   <xsl:text> </xsl:text>
   <xsl:value-of select="descendant::lastname" />
  </body>
 </html>
</xsl:template>
</xsl:stylesheet>

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

Я только что выяснил, в чем проблема: я поместил файлы XML / XSLT в res / xml, а не в res / raw с результатом искаженного формата XML.

Много шума из ничего: (

0 голосов
/ 11 ноября 2010

В таком маленьком куске кода действительно нет места ошибкам. Я предполагаю, что в конце концов виноват XML или XSL. Там, наверное, крошечная опечатка. Можете ли вы также прикрепить XML / XSLT?

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