使用通配符删除XML中的属性

时间:2018-04-09 18:24:38

标签: xml powershell xml-parsing

我有一堆xml文件,需要删除以Podemos开头的属性(例如namename-firstname-last)。我已经尝试了几种不同的方法来做到这一点,但还没有接近。

name-middle

根据请求,这是一个示例XML文件:

$files = Get-ChildItem "C:\test" -Filter *.xml 

foreach($file in $files){
    $fileXML= [xml](Get-Content $file.FullName -Encoding UTF8)
    #$nameNode1= $fileXML.Body.InnerXML.Contains('name-')
    #$nameNode2= $fileXML.Body.SelectNodes("//*[contains(@name,'')]")
    #$nameNode2= $fileXML.assessmentItem.SelectNodes("//*[local-name()='name-']")

    foreach($name in $nameNode2){
        if($name -like 'name-') {
            $name.ParentNode.RemoveAttribute($name)
        }
    }

    $fileXML.save($fileXML)
}

结果应如下所示:

<root>
    <web-app id="app-1" />
    <element id="xt92" name-type="base" name-type-style="default" />
    <elementBody>
        <content name="about-us">content</content>
        <content name="news"><p name-its="default">content</p</content>
    </elementBody>
</root>    

2 个答案:

答案 0 :(得分:0)

这是一个XSLT 3.0解决方案:

<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="@*[starts-with(name(), 'name-')]"/>

答案 1 :(得分:0)

我无法通过循环完全弄清楚如何做到这一点,但是我能用一些正则表达式做到这一点

$ xmlContent.root.InnerXml = $ xmlContent.root.InnerXml -replace'(\ sname([ - a-zA-Z] +。\ w * [a-zA-Z0-9 - \ =:。; \ S] +))。+?(\“)'