0

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


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


澄清:

  1. 将 XML 加载到 DOM 中(使用DocumentBuilder)。
  2. 解析它(只是做类似的事情doc.getFirstChild())。
  3. 将其写入 HTML 文件(仅使用字符流,而不是 XML 序列化)。

发生了什么?

在我的以下行中包含以下内容后XML

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

我的 Java 应用程序无法编写HTML正确的...

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

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

4

3 回答 3

1

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

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

这假设您的样式表是使用应用模板以经典的递归下降样式编写的;如果您是自学 XSLT,那么您可能还没有学会这种风格。与往常一样,当人们向我们展示代码时,帮助他们会容易得多。

于 2013-05-15T07:54:13.743 回答
0

这取决于您如何从 Java 应用程序中读取 XML。但是,如果您的 XML 具有嵌入式处理指令,例如

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

那么这意味着样式表是数据的一个组成部分,并且必须应用于 XML 以使其具有任何用途。这与 CSS 样式表处理指令非常相似,例如

<?xml-stylesheet type="text/css" href="standard.css"?>

<style>以同样的方式,它是 XHTML 的一个组成部分,就好像它是标签中的内部样式一样。

显然可以在不应用样式表的情况下读取和使用 XML,但这就是忽略数据本身的指令。

如果要将 XML 视为原始数据并以不同方式对其应用可选转换,则必须省略 XML 中的处理指令。

于 2013-05-14T22:05:59.823 回答
0

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

我做了以下假设:

  • 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 树中是“不可见的”)。

学习的人,学习...

PS 那是我第一次尝试使用 XSLT 转换 XML!

感谢您的帮助。

于 2013-05-15T16:31:44.313 回答