【问题标题】:Creating xml based on html using xslt in java在java中使用xslt创建基于html的xml
【发布时间】:2012-03-10 14:03:08
【问题描述】:

请帮助我,我正在做文件转换项目,即在 java 中使用 xsl 将 xml 转换为 html,并且我还需要使用 xsl 将 html 转换为 xml。我的第一个过程已经结束。但我在转换的第二部分进行了构建。有没有可能进行转换。我会告诉你第一个过程的确切流程......

这是我的示例 xml 文件: table.xml:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xml" href="testxsl.xsl"?>
<mainpara>
<epigraph>
<para>Though successful research demands a deep
<emphasis role="italic">trained</emphasis> 
<emphasis role="italic">taught</emphasis> to regard.
</para>
<para>Kuhn (1976, p. 66)</para>
</epigraph>
<blockquote role="extract">
<para>Though successful research demands a deep commitment to the status quo.
<emphasis role="italic">trained</emphasis>
<emphasis role="italic">taught</emphasis> 
</para>
</blockquote>
</mainpara>

这是我的示例 xsl 文件:

testme.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="mainpara">
    <html>
    <body>
      <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>     

  <xsl:template match="epigraph">
    <div>
      <xsl:apply-templates/>
    </div>
  </xsl:template>

  <xsl:template match="para">
    <p>
      <xsl:apply-templates/>
    </p>
  </xsl:template>

  <xsl:template match="blockquote">
    <b>
      <xsl:apply-templates/>
    </b>
  </xsl:template>  
</xsl:stylesheet>

这是我的示例 java 文件:

Main.java

import java.io.File;
import java.io.InputStream;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class Main {  


    public static void simpleTransform(String sourcePath, String xsltPath,  
                                       String resultDir) {

        TransformerFactory tFactory = TransformerFactory.newInstance();  
        try {  
            Transformer transformer =  
                tFactory.newTransformer(new StreamSource(new File(xsltPath)));  

            transformer.transform(new StreamSource(new File(sourcePath)),  
                                  new StreamResult(new File(resultDir)));  

        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

    public static void main(String[] args) {  


        System.setProperty("javax.xml.transform.TransformerFactory",
                "net.sf.saxon.TransformerFactoryImpl");

      simpleTransform("E:/bh/tabl.xml","E:/bh/testme.xsl", "E:/bh/me.html");
      //simpleTransform("E:/bh/me.html","E:/bh/11111.xsl","E:/bh/tab.xml" ); //This is i need

    }  
}  

这是我生成的 html 文件:

<html>
   <body>
      <div>

         <p>Though successful research demands a deep commitment to the status quo, innovation
         </p>

         <p>Kuhn (1976, p. 66)</p>

      </div>
      <b>

         <p>Though successful research demands a deep commitment to the status quo
         </p>
         </b>

   </body>
</html>

现在我将在编辑此 html 文件后编辑此 html 文件,我需要将其再次转换为 xml 文件或 xhtml 文件,即我需要反向过程。我认为只有修改xsl才有可能。是否可以基于该 html 创建 xsl。如果我创建了该 xsl 文件,那么我在上面的 java 程序中传递该 xsl 文件(我在主 java 程序中注释了该行)。所以我必须创建该 xsl 文件。

请帮帮我..我需要你的帮助..

提前致谢

【问题讨论】:

    标签: java xml xslt xhtml


    【解决方案1】:

    无法进行逆向转换

    您的转换并非无损。除此之外,您丢失了emphasis 信息——它不会反映在 HTML 输出中。

    【讨论】:

      【解决方案2】:

      Dimitre 一如既往地正确,但让我再解释一下。

      这里至少有两个问题。

      首先,您的输入 XML 中有诸如 &lt;emphasis role="italic"&gt;trained&lt;/emphasis&gt; 之类的文本,这些文本不会输出到您的 HTML。因此,任何工具或任何人都绝对不可能逆转转换并猜测使用什么 XML 来生成 HTML。这就是 Dimitre 所说的“你的转换不是无损的”

      但是让我们假设您更改了将 XML 转换为 HTML 的 XSLT,这样人类就可以通过查看 HTML 来计算出原始 XML 是什么...

      其次,将 HTML 转换回 XML 的 XLS 将与将 XML 转换为 HTML 的 XSL 完全不同。

      您是否自己编写了问题中显示的 XSLT?如果不是,那么您需要做的第一件事就是尝试理解该代码。如果你连这么多都不懂,你就永远无法找到解决问题的办法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-05
        • 2019-08-17
        • 2011-11-23
        • 2021-01-09
        • 2014-11-02
        • 1970-01-01
        • 2012-03-09
        相关资源
        最近更新 更多