用Powershell编辑文本选择

问题描述:

我有一堆xml文件,每个文件都不同,我需要编辑某个部分(所有文件都有)。我可以成功地将文本插入到该区域,但我需要能够从该部分删除线或完全清空该部分。当我不知道该区域的长度时,我不太明白我如何做类似于“Select-String -Context 0,3”的东西。我基本上只需要能够从“< area1>”到“</area1>”中选择并删除里面的所有内容。用Powershell编辑文本选择

<区1>

一号线

2号线

< /区1>

+1

您可以将字符串转换为XML数据类型,并指定你要寻找的元素,无论是与XPath查询或者只是点引用。只有当元素是独特的名称或者以独特的顺序时,它才会有效,但通常它运行得很好。 –

正如评论所说,您可以将您的文件转换为实时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')