2012-02-20 80 views
2

請幫助我,我正在做項目的文件轉換,它使用xsl在java中將xml轉換爲html,並且我需要使用xsl將html轉換爲xml。我的第一個過程是結束了,但我在轉換的第二部分構建..是否有任何可能做這種轉換。我會告訴你的第一個過程的確切流程...在java中使用xslt創建基於html的xml

這是我的示例xml文件: tabl.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文件(我在主程序中註釋了該行)。因此我必須創建該xsl文件。

請幫助我。我需要你的幫助..提前

回答

0

逆變換不能做

感謝。

您的轉換不是無損的。除此之外,您已經丟失了emphasis信息 - 它不會反映在HTML輸出中。

0

Dimitre與往常一樣正確,但讓我多解釋一下。

這裏至少有兩個問題。

首先,您的輸入XML中沒有輸出到HTML的文本,如<emphasis role="italic">trained</emphasis>。因此,絕對沒有辦法讓任何工具或者實際上的人都能夠扭轉轉換並猜測用什麼XML來生成HTML。這就是Dimitre的意思是「你的轉換不是無損的」

但是讓我們假設你改變了你的XSLT,將XML轉換成HTML,這樣人類可以通過查看HTML來計算出原始XML ...

其次,將HTML轉換回XML的XLS將與將XML轉換爲HTML的XSL完全不同。

您是否自己編寫了問題中顯示的XSLT?如果沒有,那麼你需要做的第一件事就是嘗試並理解代碼。如果你甚至無法理解這一點,你將永遠無法找出解決問題的辦法。