2014-04-14 97 views
1

我需要將XML導入到一個軟件中,我提供的XML由不同的軟件創建併發送給我自己。我通常會瀏覽XML文檔並去掉所有CDATA標籤,然後必須查找並替換所有標籤,從大寫字母到小寫字母,並刪除任何STRONG標籤或OL標籤。清潔XHTML標籤

但我不得不重組的標籤,以允許它被導入到軟件中,例如:

< B>有一些文字在這裏< P />更多大膽的文字</B>

這將不會導入,除非我手動進去,將其更改爲

< b>有一些文字在這裏</b> < p /> < b>更大膽的文字</b>

我看過HTMLTidy和其他這樣的工具,它們會完全去除< p />標記。我需要保持原始格式的數據,如果有任何方法可以做到這一點?

+0

我認爲這是親近上不可能更改標籤而不更改格式。 這裏得到了一些文字

更加粗體的文字是有效的HTML。爲什麼不能接受? –

+0

我把它導入的系統吐出了很多有關未封閉的< b>標籤的錯誤。這是一個糟糕的工具,讓我成爲一場噩夢。我正在考慮沿着正則表達式路線尋找標籤內的任何標籤,並在它們周圍插入一個靠近並打開的標籤。我只是希望可能已經有一個解決方案 – ssjStark

+0

閱讀HTML是真的*最好的HTML解析器。我一直試圖使用正則表達式,這是一個絕對的噩夢。我真的不知道你的全部案例,所以我不能真正說出你做錯了什麼,但它可能會爲你節省一些時間!我會建議檢查http://htmlagilitypack.codeplex.com/任一方式!它不是萬無一失的,但它確實可以處理大多數您在網絡上發現的格式錯誤的標籤等。 –

回答

1

使用XSLT,你可以做這樣的事情:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:output indent="no" omit-xml-declaration="yes"/> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="b/text()"> 
     <b> 
      <xsl:value-of select="."/> 
     </b> 
    </xsl:template> 

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

</xsl:stylesheet> 

當像

<b>Got some text here<p/>More bold text</b> 

輸出對輸入的:

<b>Got some text here</b><p/><b>More bold text</b> 
+0

奇妙的是,這是一種享受。只需進行一些修改即可使其與我當前的代碼集成。 – ssjStark