2012-10-12 53 views
3

我想使用XML/HTML解析器解析HTML文件,該解析器包含用於翻譯的隱藏註釋文本,即下面的X和Y.使用XPath和正則表達式提取HTML註釋中的文本

<!-- Title: 「 X 」 Tags: 「 Y 」 --> 

哪個XPath最適合X和Y? //comment()函數匹配整個節點,但我需要匹配之間的兩個引號。

我想人們會需要XPath和正則表達式的組合來做到這一點,但我不知道如何解決這個問題。

+0

你使用JavaScript?然後請提及或添加標籤或兩者。 –

+0

你在用什麼語言來實現它? –

回答

3

我假設評論中的引號是相同的,普通的qoute字符" - 不是在顯示此問題時出現的印刷上不同的開始和結束引用。

如果這種假設是錯誤的,只需將下面的表達式中的標準報價替換爲相應的報價即可。


使用(如果有問題的評論是在文檔中的第一個):

substring-before(substring-after(//comment(), '"'), '"') 

這將產生字符串(不帶引號):

「X 「

而對於引號中的第二個字符串使用:

substring-before(
    substring-after(
     substring-after(
       substring-after(//comment(), '"'), 
       '"'), 
     '"'), 
    '"') 

XSLT - 基於驗證(因爲XSLT樣式表必須是我們與實體&quot;替換表達式引號一個良好的XML文檔 - 只是爲了避免因嵌套報價錯誤):

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    "<xsl:copy-of select="substring-before(substring-after(//comment(), '&quot;'), '&quot;')"/>" 
============= 
    "<xsl:copy-of select= 
    "substring-before(substring-after(substring-after(substring-after(//comment(), '&quot;'), '&quot;'), '&quot;'), '&quot;')"/>" 
</xsl:template> 
</xsl:stylesheet> 

當這種轉變是對這個XML文檔應用:

<html> 
    <body> 
    Hello. 
<!-- Title: " X " Tags: " Y " --> 
    </body> 
</html> 

兩個XPath表達式求值這兩個評價結果將被複制到輸出(引號,以示覆制的確切字符串):

 " X " 
============= 
    " Y " 
相關問題