2010-09-10 20 views
0

我有一個用BBEdit編輯的大XML文件。使用正則表達式從另一個集合中刪除一組標籤

在XML文件中,這是舊日記的數字娛樂,是用音符標記的文本。

<note>Example of a note.</note> 

但是,有些註釋標記在引用標籤中嵌入了引號。

<note>Example of a note, but <quote>"here is a quotation within the note"</quote></note> 

我需要從註釋標記中刪除所有報價實例,同時保留報價標籤的實際內容。因此,例如將成爲:

<note>Example of a note, but "here is a quotation within the note"</note> 

我使用GREP中BBEdit中成功刪除其中的一些,但我開始陷入與過去幾行或有之間的文本更復雜的筆記標記獲得兩套不同的標籤。例如:

<note>Example of a note, <quote>"with a quotation"</quote> and a <quote>"second quotation"</quote> along with some text outside of the quotation before the end of the note.</note> 

一些報價可以繼續超過10行。在我的正則表達式中使用\ r似乎沒有幫助。

我還應該說引號標籤可以存在於音符標籤之外,這就排除了只發現/?引用並刪除它的可能性。我仍然需要使用文檔中的引號標籤,而不是註釋標籤內。

非常感謝您的幫助。

回答

2

這與XSLT很容易:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

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

應用該樣式表XML文件與您選擇的XSLT處理器。例如,有些工具可以在命令行上運行。

0

對XML的形成沒有任何限制,我敢肯定,這不在正規語言的範圍內,而是在上下文無關的範圍內,這意味着正則表達式不會幫助您。如果XML的結構很簡單(沒有節點嵌套在節點中或引號嵌套在引號中),您可能可以按照全局替換<node>(!</node>)<quote>(!</quote>)</quote>(!</node>)</node><node>\1\2\3</node>的方式執行某些操作,但是您可能使用了錯誤的工具工作。作爲其他答案之一,XSLT可以幫助您,或者您可以使用XML解析庫編寫簡單的程序來去除您正在查找的標籤。

相關問題