我正在学习如何使用Java将XML
文件转换为HTML
,之后我决定学习如何使用XSLT
语言来做同样的事情。
通过说只是java ,我的意思是,只使用Java语言的语法,即不是XSLT语言。
澄清:
DocumentBuilder
)。doc.getFirstChild()
这样的事情。)发生了什么事?
在我的XML
中包含以下行:
<?xml-stylesheet type="text/xsl" href="mystylesheet.xsl"?>
我的Java应用程序无法编写HTML
权限...
如果我删除它,一切都是正确的,但我想保留它。
任何想法如何忽略这个“指令”?
答案 0 :(得分:1)
默认情况下,XSLT将忽略处理指令(即删除它们)。如果要保留此模板,只需添加模板规则即可:
<xsl:template match="processing-instruction('xml-stylesheet')">
<xsl:copy/>
</xsl:template>
这假设您的样式表使用apply-templates以经典的递归下降样式编写;如果您在XSLT中自学成才,那么您可能还没有学过这种风格。与往常一样,当他们向我们展示代码时,帮助他们会更容易。
答案 1 :(得分:0)
这取决于您从Java应用程序中读取XML的方式。但是,如果您的XML具有嵌入式处理指令,如
<?xml-stylesheet type="text/xsl" href="mystylesheet.xsl"?>
然后它意味着样式表是数据的组成部分,必须应用于XML才能使用它。这非常类似于CSS样式表处理指令,例如
<?xml-stylesheet type="text/css" href="standard.css"?>
以相同的方式,它是XHTML的一个组成部分,就像它是<style>
标签内的内部风格一样。
显然可以在不应用样式表的情况下阅读和使用XML,但这是忽略数据本身的指令。
如果要将XML视为原始数据并以不同方式对其应用可选转换,则必须省略XML中的处理指令。
答案 2 :(得分:0)
对不起,伙计们,我认为XML
stylesheet.xsl
在我用来解析XML的DOM
对象中被“转换”了。
我假设:
<?xml-stylesheet type="text/xsl" href="mystylesheet.xsl"?>
在DOM中不可见。基本上我有一个简单的XML来开始学习如何进行转换。如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<items><item>...</item></items>
为了简单起见(我正在学习......)我决定开始解析:
parse(doc.getFirstChild().getFirstChild()); //Expecting the first "item".
但是在将样式表引入XML后,文档变为:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="mystylesheet.xsl"?>
<items><item>...</item></items>
由于这一介绍,doc.getFirstChild().getFirstChild()
不再是“项目”了。
然后我才意识到我忘了用这条指令跳过节点(我真的认为它在DOM树中是“不可见的”)。
学习家伙,学习......
P.S。这是我第一次尝试使用XSLT转换XML!
感谢您的帮助。