我有一堆xml文件,需要删除以Podemos
开头的属性(例如name
,name-first
,name-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>
答案 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] +))。+?(\“)'