XML starlet XSLT 转换无法删除节点



我正在尝试使用 xmlstarlet 来处理一大组 .Net 项目文件,但是尝试使用 xsl 删除ProductVersion进行这种简单的转换不起作用。

我已经尝试过//ProductVersion,在这种情况下,命名空间会导致问题吗?

运行.cmd

SET ProjFile=test.vbproj
SET TempFile=%TEMP%temp.proj
xml tr clean.xsl %ProjFile% > %TempFile%
move /Y %TempFile% %ProjFile%

clean.xsl

<?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" version="1.0" 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="ProductVersion"/>
</xsl:stylesheet>

Test.vbproj

<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0">
  <PropertyGroup>
    <ProductVersion>9.0.30729</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
  </PropertyGroup>
</Project>

你可以直接使用 xmlstarlet edit 子命令执行此操作:

xmlstarlet ed 
  -N ms=http://schemas.microsoft.com/developer/msbuild/2003 
  -d '//ms:ProductVersion' test.vbproj

或者,您可以修改 XSLT 以遵循命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:ms="http://schemas.microsoft.com/developer/msbuild/2003">
    <xsl:output method="xml" version="1.0" 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="ms:ProductVersion"/>
</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新