首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测和删除空XML标记?

如何检测和删除空XML标记?
EN

Stack Overflow用户
提问于 2015-05-27 06:16:42
回答 3查看 3K关注 0票数 0

我有一堆XML文件,我希望检测并删除其中的空标记。像这样:

代码语言:javascript
复制
<My></My>
<Your/>

<sometags>
    <his>
    </his>
    <hasContent>sdfaf</hasContent>
</sometags>

它们是我希望删除的各种空标签(MyYourhis)。PowerShell是否支持这种空标签检测,不管它们嵌入到其他标记中有多深?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-27 06:40:25

代码语言:javascript
复制
function Format-XML
{ 
    param (
        [parameter(Mandatory = $true)][xml] $xml, 
        [parameter(Mandatory = $false)][int] $indent = 4
    ) 

    try
    {
        $Error.Clear()

        $StringWriter = New-Object System.IO.StringWriter 
        $XmlWriter = New-Object System.XMl.XmlTextWriter $StringWriter 
        $xmlWriter.Formatting = "indented" 
        $xmlWriter.Indentation = $indent 
        $xml.WriteContentTo($XmlWriter) 
        $XmlWriter.Flush() 
        $StringWriter.Flush() 

        return $StringWriter.ToString() 
    }

    catch
    {
        Write-Host "$($MyInvocation.InvocationName): $_"; return $null
    }
}


$xml = [xml] @"
<document>
    <My></My>
    <Your/>
    <sometags>
        <his>
        </his>
        <hasContent>sdfaf</hasContent>
    </sometags>
</document>
"@

# The "magic" part is in this XPath expression

$nodes = $xml.SelectNodes("//*[count(@*) = 0 and count(child::*) = 0 and not(string-length(text())) > 0]")

$nodes | %{
    $_.ParentNode.RemoveChild($_)
}

Format-Xml $xml
票数 7
EN

Stack Overflow用户

发布于 2015-05-27 07:18:31

我对powershell不太熟悉,所以在@DavidBrabant的好答案中,特别是XPathpart.xpath来检测空元素可以简单一点:

代码语言:javascript
复制
//*[not(@*) and not(*) and normalize-space()]

谓词([]中的所有内容)依次检查当前元素是否没有属性、没有子元素和没有空文本节点。

票数 1
EN

Stack Overflow用户

发布于 2015-05-27 07:22:18

您应该寻找使用System.Xml.XmlDocument的解决方案。但是它也可以使用regex:

代码语言:javascript
复制
$xml = @"
<document>
    <My></My>
    <Your/>
    <sometags>
        <his>
        </his>
        <hasContent>sdfaf</hasContent>
    </sometags>
</document>
"@

$xml -replace '(?:<(\w*)>\s*<\/\1>)|<(\w*)\/>', ''
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30474517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档