我有一个大型XML文件,我正在使用BBEdit进行编辑。
在XML文件中,这是旧日记的数字重新创建,是包含在注释标记中的文本。
<note>Example of a note.</note>
但是,某些注释标记的引号中嵌有引号,并嵌入其中。
<note>Example of a note, but <quote>"here is a quotation within the note"</quote></note>
我需要从note标记中删除所有引用实例,同时保留引号标记的实际内容。所以这个例子就变成了:
<note>Example of a note, but "here is a quotation within the note"</note>
我已经在BBEdit中使用了GREP来成功删除其中的一些,但是我开始陷入更复杂的注释标记,这些注释标记遍历多行或者在两组不同的标记之间存在文本。例如:
<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行。在我的正则表达式中使用\ rr似乎没有帮助。
我还应该说,引号标签可以存在于注释标签之外,这排除了批量查找/引用和删除它的可能性。我仍然需要在文档中使用引用标记,而不是在注释标记内。
非常感谢您的帮助。
答案 0 :(得分: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>
使用您选择的XSLT处理器将此样式表应用于XML文件。例如,有一些工具可以在命令行上运行。
答案 1 :(得分:0)
不限制XML的形成方式,我很确定这超出了常规语言的范围和无上下文的范围,这意味着正则表达式不会对你有所帮助。如果XML的结构很简单(没有嵌套在节点中的节点或嵌套在引号中的引号),那么您可以在<node>(!</node>)<quote>(!</quote>)</quote>(!</node>)</node>
全局替换为<node>\1\2\3</node>
的情况下执行某些操作,但是您可能会使用错误的工具来完成工作。作为其他答案之一,XSLT可以帮助您,或者您可以使用XML解析库编写一个简单的程序来去除您正在寻找的标签。