使用Java中的XSLT将HTML转换为XML

3

大家好,我需要在Java中使用XSLT将HTML转换为XML。我已经使用Java中的XSLT将XML转换为HTML。下面是我用于进行转换的代码:

import javax.xml.transform.*;

import java.net.*;
import java.io.*;

public class HowToXSLT {

public static void main(String[] args) {

  try {

    TransformerFactory tFactory = TransformerFactory.newInstance();

    Transformer transformer =
      tFactory.newTransformer
         (new javax.xml.transform.stream.StreamSource
            ("howto.xsl"));

    transformer.transform
      (new javax.xml.transform.stream.StreamSource
            ("howto.xml"),
       new javax.xml.transform.stream.StreamResult
            ( new FileOutputStream("howto.html")));
    }
  catch (Exception e) {
    e.printStackTrace( );
    }
  }
}

但我不知道将html转换为xml的相反过程是什么?是否有可用的jar文件来完成此操作?请帮助我...
5个回答

3

通常情况下,无法“逆转”一个变换,因为在一般情况下,变换不是一对一的映射。

例如,如果变换做了这个:

<xsl:value-of select= "/x * /x"/>

我们的结果是:16

(我们知道源XML文档只有一个元素)

从值16无法确定源XML文档是哪种情况:

<x>4</x>

无论是什么:

<x>-4</x>

以上仅是一个简单的例子! :)


1
这将取决于您想要做什么。 显然,howto.xsl 包含要应用于 xml 以获取 html 的规则。
您将需要编写另一个 xsl 文件来执行相反的操作。

真的,但是我指的是相反的 方向 :-) - Maestro13

0

我认为这是不可能的。XSLT输入必须符合XML标准,而HTML不符合XML标准(除非你谈论的是XHTML)。


1
XHTML 部分不是问题;你可以告诉 XSLT 输出格式良好的 XHTML。真正的问题是试图弄清楚哪个 HTML 元素是由哪个 XSLT 位渲染的。我的意思是,如果 XSLT 已经将每个 XML 数据片段都翻译成了 div,那么仅从生成的 HTML 中就无法确定哪个 div 是哪个转换的结果。 - Mr Lister
1
如果原始转换不是1:1映射(这很少见),则不存在反向转换。这就是为什么通常情况下该问题没有解决方案的原因。 - Dimitre Novatchev
谢谢您的回复......实际上,我使用Java将XML转换为HTML,并已完成使用XSL对HTML文件应用一些样式,但是在此之后,我需要使用XSL将此HTML转换为XML?是否有可能基于我之前编辑过的HTML文件创建新的XSL?请帮助我。 - Venkat SM
我认为这是不可能的,除非你在创建HTML时特别小心。 - jb.

0
也许你需要先将你的HTML转换为XHTML,然后使用一个包含指令将XHTML文件转换为XML的XSL(原始XSL的反向) 。

-1

这是不可能的,您可以使用 Microsoft.XMLDOM 将 HTML 转换为 XML。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接