Xml 删除包含X的根节点 36037 4. 30 下降

Xml 删除包含X的根节点 36037 4. 30 下降,xml,notepad++,Xml,Notepad++,My.XML文件包含14000行,删除的值出现125次。我想删除根节点和其中的所有内容(如果它包含已删除的)。是否有一种方法可以批量删除它,或者手动删除是唯一的方法?考虑运行一种专门用于转换XML文件的语言,例如根据特定条件删除节点。具体来说,运行以按原样复制文档和空模板以有条件地删除所需的元素 您可以在几乎任何通用语言(如C#、Java、Python、PHP,甚至VBA)中运行XSLT1.0脚本,就像其他专用语言(SQL)一样。此外,专用的独立工具甚至可以运行XSLT2.0和3.0。看 XSL

My.XML文件包含14000行,删除的值出现125次。我想删除根节点和其中的所有内容(如果它包含已删除的
。是否有一种方法可以批量删除它,或者手动删除是唯一的方法?

考虑运行一种专门用于转换XML文件的语言,例如根据特定条件删除节点。具体来说,运行以按原样复制文档和空模板以有条件地删除所需的元素

您可以在几乎任何通用语言(如C#、Java、Python、PHP,甚至VBA)中运行XSLT1.0脚本,就像其他专用语言(SQL)一样。此外,专用的独立工具甚至可以运行XSLT2.0和3.0。看

XSLT(另存为.xsl文件,一个特殊的.xml文件)


Windows使用PowerShell脚本调用网络

将下面另存为.ps1脚本

xsltproc -o /path/to/output.xml /path/to/XSLTScript.xsl /path/to/input.xml
命令行调用(将输出新的转换后的XML文件)


您可以通过XSLT处理器(版本1.0及以上)结合使用空模板和标识模板来实现这一点。使用以下XSLT模板删除所有
元素,其中
元素的值
已删除

Powershell.exe -File "C:\Path\To\PowerShell\Script.ps1"^
 "C:\Path\To\Input.xml" "C:\Path\To\XSLTScript.xsl" "C:\Path\To\Ouput.xml"


您可以将其应用于Windows和Linux。或者您可用的任何其他XSLT处理器。

您真的是指使用“我的状态”值删除当前节点吗?删除根节点将使XML无效。感谢您的回答。因为我不熟悉.XML,所以我使用它作为指导。My.XML文件以
开头,以
结尾。这是所讨论的.XML文件的图片。我上面提到的不是根节点吗?我对Notepad++不太了解,但这听起来像是一项任务。
xsltproc -o /path/to/output.xml /path/to/XSLTScript.xsl /path/to/input.xml
param ($xml, $xsl, $output)

if (-not $xml -or -not $xsl -or -not $output) {
    Write-Host "& .\xslt.ps1 [-xml] xml-input [-xsl] xsl-input [-output] transform-output"
    exit;
}

trap [Exception]{
    Write-Host $_.Exception;
}

$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;

$xslt.Load($xsl);
$xslt.Transform($xml, $output);

Write-Host "generated" $output;

Read-Host -Prompt "Press Enter to exit";
Powershell.exe -File "C:\Path\To\PowerShell\Script.ps1"^
 "C:\Path\To\Input.xml" "C:\Path\To\XSLTScript.xsl" "C:\Path\To\Ouput.xml"
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

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

  <!-- empty template for all 'mystatus=Dropped` manga elements -->
  <xsl:template match="manga[my_status = 'Dropped']" />

</xsl:stylesheet>