簡體   English   中英

刪除XML中特定標簽之間的標簽(Notepad ++)

[英]Delete tags between specific tags in XML (Notepad++)

我已經使用了搜索功能,但沒有找到問題的答案。

我有一個類似下面的XML結構(示例):

<Task name="1B">
 <Person type ="XX" name="YY" height="ZZ"/>
 <Person type ="XX" name="YY" height="ZZ"/> 
 <Person type ="XX" name="YY" height="ZZ"/> 
 </Task>

 <Task name="1C">
 <Person type ="XX" name="YY" height="ZZ"/>
 <Person type ="XX" name="YY" height="ZZ"/> 
 <Person type ="XX" name="YY" height="ZZ"/> 
 </Task>

現在,我想通過Notepad ++刪除名稱為“ 1B”的標簽以及打開和關閉標簽之間的所有標簽。 記事本中有辦法嗎? 我已經嘗試過RegEx Pattern,但沒有找到正確的方法。

強烈建議不要將regex與HTML一起使用,因為這會導致許多問題和不必要的問題。 請參閱RegEx匹配開放標簽,XHTML自包含標簽除外 使用XSLT轉換XML是您真正需要的工具。

使用remove_xml_tag.xsl示例名稱創建一個UTF8編碼的文件,並將其粘貼到其中:

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

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

 <xsl:template match="Task[@name='1B']"/>
</xsl:stylesheet>

XSL處理每個節點和屬性( node()|@* ),並且遇到name屬性等於1BTask元素( "Task[@name='1B']" )時,它不會將其寫入輸出中。

然后運行XML Tools插件-> XSL Transformation 你會看見:

在此處輸入圖片說明

單擊右側的...按鈕,然后瀏覽XSL文件。

單擊變換按鈕。

一個后備解決方案,以防您擁有格式錯誤的XML,該格式僅在沒有嵌套的Task節點時才有效:

<Task\s+name="1B">[^<]*(?:<(?!/Task>)[^<]*)*</Task>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM