我有一些非常大的XML文件。我需要删除开始和结束XML标记之间的所有正斜杠。 foward斜线可以用空格代替。我需要在不删除结束HTML标记的正斜杠的情况下执行此操作。非常感谢任何帮助!
此:
<XML>
<REDACTED27> CT LSPINE W/O CONT XR29 </REDACTED27>
<sampletag>str1/str2/str3</sampletag>
</XML>
成为这个:
<XML>
<REDACTED27> CT LSPINE W O CONT XR29 </REDACTED27>
<sampletag>str1 str2 str3</sampletag>
</XML>
答案 0 :(得分:4)
使用解析实际XML的XML感知工具。例如,在Spring docs中,您只需编写
即可open file.xml ;
for //text() set . xsh:subst(., '/', ' ', 'g') ;
save :b ;
答案 1 :(得分:3)
最好不使用sed,awk或任何其他文本编辑实用程序。
使用XML编辑实用程序,例如XSLT。
以下转换使输入保持不变(除非从中缩进,但您可以禁用它)并且只修改文本节点(即开始和结束XML标记之间的东西“):
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="translate(., '/', ' ')" />
</xsl:template>
</xsl:transform>
另存为例如removeslashes.xsl
并在命令行中使用xsltproc
。
xsltproc -o outputfile.xml removeslashes.xsl inputfile.xml
答案 2 :(得分:1)
您应该安装xmlstarlet
,然后基本上安装:
xmlstarlet pyx source.xml | perl -pe 'm/^-/ && s/\// /g' | xmlstarlet p2x > target.xml
在pyx中,以“ - ”开头的行表示文本节点,因此您可以替换它们中的斜杠并将xml组合回来而不会触及任何其他内容。
答案 3 :(得分:0)
当您添加notepad++
代码时,我建议在“查找内容”(以及“替换为”中的空格)中使用此Ctrl+H
替换所有内容(regex
)
(?<!<)/(?!>)
负面的背后隐藏(?<!<)
确保<
之前没有任何字符/
,而负向前瞻(?!>)
确保之后没有>
。在这里,我假设没有</
或/>
出现在标记之外,以便更快地处理“非常大的XML文件”。
答案 4 :(得分:0)
缺少xml感知工具,这适用于简单结构
$ sed -r 's_([^<])/([^>])_\1 \2_g' xml
<XML>
<REDACTED27> CT LSPINE W O CONT XR29 </REDACTED27>
<sampletag>str1 str2 str3</sampletag>
</XML>
<test/>