我想用一个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文件进行转换(source.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:样式>
解决方案
我只是发现了哪些问题是:我把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 :(