[英]Regex in Notepad++ to select on string length between specific XML tags
[英]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
屬性等於1B
的Task
元素( "Task[@name='1B']"
)時,它不會將其寫入輸出中。
然后運行XML Tools插件-> XSL Transformation 。 你會看見:
單擊右側的...按鈕,然后瀏覽XSL文件。
單擊變換按鈕。
一個后備解決方案,以防您擁有格式錯誤的XML,該格式僅在沒有嵌套的Task
節點時才有效:
<Task\s+name="1B">[^<]*(?:<(?!/Task>)[^<]*)*</Task>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.