安卓:使用XSLT转换XMLXSLT、XML

2023-09-05 07:02:39 作者:虎口夺江山

我想用一个XSL文件并输出结果以某种方式(我使用的是Android API级别8)。

要改造一些XML

我目前的活动看起来是这样,但变压器保持空。 LogCat中抛出一个 System.err的 org.apache.harmony.xml.ExpatParser $ ParseException的,说XML不是良好的,但我确信它是什么。

我发现在LogCat中的提示,上面写着 SYSTEMID未知只是上面的错误消息之前。

我是什么做错了吗?

 进口java.io.OutputStream中;

进口javax.xml.transform.Source;
进口的javax.xml.transform.Transformer;
进口javax.xml.transform.TransformerConfigurationException;
进口javax.xml.transform.TransformerException中;
进口javax.xml.transform.TransformerFactory的;
进口javax.xml.transform.TransformerFactoryConfigurationError;
javax.xml.transform.stream.StreamResult中的进口;
进口javax.xml.transform.stream.StreamSource中;

进口android.app.Activity;
进口android.os.Bundle;

公共类XsltTester延伸活动{

    私有静态字符串变量= XsltTester.class.getSimpleName();

    / **第一次创建活动时调用。 * /
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);

        尝试 {

            来源xmlSource =新StreamSource的(this.getResources()openRawResource(R.xml.source));
            来源xsltSource =新StreamSource的(this.getResources()openRawResource(R.xml.products));

            的TransformerFactory transFact = TransformerFactory.newInstance();
            变压器反= transFact.newTransformer(xsltSource);
            的OutputStream输出=新StringOutputStream();
            StreamResult结果=新StreamResult(输出);
            trans.transform(xmlSource,结果);

        }赶上(TransformerConfigurationException E){
            // TODO自动生成的catch块
            e.printStackTrace();
        }赶上(TransformerFactoryConfigurationError E){
            // TODO自动生成的catch块
            e.printStackTrace();
        }赶上(TransformerException中五){
            // TODO自动生成的catch块
            e.printStackTrace();
        }
    }
}
 

这是XML文件进行转换(sou​​rce.xml)

 < XML版本=1.0&GT?;
<! - <?xml样式表的HREF =beatle.xsl类型=文/ XSL>? - >
<人>
 <名称>
  <名字>保罗< /姓>
  <名字>麦卡特尼< /姓氏>
 < /名称>
 <工作>歌手< /工作>
 <性别>男< /性别>
< /人>
 

这是相应的XSL(products.xsl)          

 < XSL:模板匹配=孩子::人>
 < HTML>
  < HEAD>
   <冠军>
    < XSL:value-of的选择=后裔::名字/>
    < XSL:文本> < / XSL:文本>
    < XSL:选择=后裔::姓氏/&GT价值的;
   < /标题>
  < /头>
  <身体GT;
   < XSL:value-of的选择=后裔::名字/>
   < XSL:文本> < / XSL:文本>
   < XSL:选择=后裔::姓氏/&GT价值的;
  < /身体GT;
 < / HTML>
< / XSL:模板>
< / XSL:样式>
 
svg转xml 使用Android Studio

解决方案

我只是发现了哪些问题是:我把XML / XSLT文件RES / XML不是RES /生着错位的XML格式的结果。

无事生非:(

I want to transform some xml using an xsl-file and output the result somehow (I'm using Android Api Level 8).

My current activity looks like this, but the transformer stays null. LogCat throws an System.err with org.apache.harmony.xml.ExpatParser$ParseException, saying the xml is not well-formed, but I made sure it is.

I found a hint in LogCat that says SystemId Unknown just before the above error message.

What am I doing wrong?

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();
        }
    }
}

This is the xml-file to be transformed (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>

And this is the corresponding 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>

解决方案

I just found out what the problem is: I put the XML/XSLT files in res/xml not in res/raw with the result of mangled XML format.

Much ado about nothing :(

 
精彩推荐
图片推荐