我有一堆xml文件,每个文件都不同,我需要编辑某个部分(所有文件都有)。我可以成功地将文本插入该区域,但我需要能够从所述部分中删除行或者只是完全清空该部分。当我不知道该区域的长度时,我不太明白我怎么能做类似于“Select-String -Context 0,3”的事情。我基本上只需要能够从“< area1>”中选择到“< / area1>”并删除里面的所有内容。
< area1>
1行
LINE2
< / area1>
答案 0 :(得分:0)
正如评论中所建议的那样,您可以将文件转换为实时xml类型,并对其进行操作,如下所示:
# In you case, you would load it from a file with Get-Content
$XmlString = @'
<?xml version="1.0"?>
<content>
<areas>
<area1>
some text
more lines
when does it end?
</area1>
<area2>
uninteresting text
</area2>
<area3>
more of it
</area3>
</areas>
</content>
'@
# Create an XmlDocument object from the string input
$XmlDoc = [xml]$XmlString
# Select the area1 node with XPath
$area1 = $XmlDoc.SelectSingleNode('//area1')
# Set the inner text value to an empty string:
$area1.'#text' = ''
# Save the document
$XmlDoc.Save("C:\path\to\file.xml")
XPath表达式//area1
将找到标记名为“area1”的任何节点。
如果文档中有多个,则可以指定完整路径:
$area1 = $XmlDoc.SelectSingleNode('/content/areas/area1')