【问题标题】:Editing selection of text with Powershell使用 Powershell 编辑文本选择
【发布时间】:2015-12-25 03:27:49
【问题描述】:

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

第一行

第2行

【问题讨论】:

  • 您可以将字符串转换为 XML 数据类型并指定您要查找的元素,可以使用 XPath 查询或仅使用点引用。仅当元素是唯一名称或具有唯一顺序时,它才能正常工作,但通常效果很好。

标签: xml powershell


【解决方案1】:

按照 cmets 中的建议,您可以将文件转换为实时 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2018-01-06
    • 2020-09-18
    相关资源
    最近更新 更多