使用Java转换XML

时间:2013-05-14 20:41:19

标签: java xml xslt

我正在学习如何使用Java将XML文件转换为HTML,之后我决定学习如何使用XSLT语言来做同样的事情。


通过说只是java ,我的意思是,只使用Java语言的语法,即不是XSLT语言。


澄清:

  1. 将XML加载到DOM中(使用DocumentBuilder)。
  2. 解析它(只做像doc.getFirstChild()这样的事情。)
  3. 将其写入HTML文件(仅使用字符流,而不是XML序列化)。
  4. 发生了什么事?

    在我的XML中包含以下行:

    <?xml-stylesheet type="text/xsl" href="mystylesheet.xsl"?>

    我的Java应用程序无法编写HTML权限...

    如果我删除它,一切都是正确的,但我想保留它。

    任何想法如何忽略这个“指令”?

3 个答案:

答案 0 :(得分:1)

默认情况下,XSLT将忽略处理指令(即删除它们)。如果要保留此模板,只需添加模板规则即可:

<xsl:template match="processing-instruction('xml-stylesheet')">
  <xsl:copy/>
</xsl:template>

这假设您的样式表使用apply-templates以经典的递归下降样式编写;如果您在XSLT中自学成才,那么您可能还没有学过这种风格。与往常一样,当他们向我们展示代码时,帮助他们会更容易。

答案 1 :(得分:0)

对不起,伙计们,我认为XML stylesheet.xsl在我用来解析XML的DOM对象中被“转换”了。

我假设:

  • 在将XML放入DOM之前,XML正在被转换。
  • <?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!

感谢您的帮助。

答案 2 :(得分: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中的处理指令。