xml - Powershell 每第 N 行更改一次 XML 元素
问题描述
我有一个 xml 文件,其中每个元素的格式如下:
<ScriptEvent xsi:type="Event">
<_time>0</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>1</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>2</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>3</_time>
</ScriptEvent>
我想知道如何像这样更改xml:
- 我们将有一个变量“count”,这是我们将用来替换当前“_time”元素的值
- 每两个 ScriptEvent 元素,此计数将增加一。
例如,预期的输出文件将如下所示:
<ScriptEvent xsi:type="Event">
<_time>0</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>0</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>1</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>1</_time>
</ScriptEvent>
我对powershell不是很好,有人可以帮我想一个可行的powershell脚本吗?我拥有的 xml 文件实际上有很多这些 ScriptEvent 元素(超过 400k)。
非常感谢。
解决方案
这是一个简化的示例,它利用了PowerShell[xml]
对类 ( System.Xml.XmlDocument
)提供的 XML DOM的便捷适配:
# Parse XML text into a DOM.
[xml] $xmlDoc = @'
<root xmlns:xsi="http://example.org" >
<ScriptEvent xsi:type="Event">
<_time>0</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>1</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>2</_time>
</ScriptEvent>
<ScriptEvent xsi:type="Event">
<_time>3</_time>
</ScriptEvent>
</root>
'@
# Loop over all <ScriptElement> children of the <root> element
# and update their <_time> values.
$i = 0; $count = 0
foreach ($el in $xml.root.ScriptEvent) {
$el._time = $count
if ($i++ % 2) { ++$count }
}
有关如何从文件加载 XML 以及如何在保存回文件时进行漂亮打印的信息,请参阅此答案。
推荐阅读
- pandas - 如何获得 dask 系列结构中的值?
- php - 如何使用 php header 设置多个 cookie
- python - 如何将字典拆分为训练集和测试集 Python,其中每个项目的值是 99*160 大小的数值列表
- excel - 使用文件资源管理器将多个嵌入式 OLE 对象保存到目标文件夹
- python - 'float' 对象不可迭代应用 lambda 函数
- python - 有没有办法在 GPU 上加速 CatBoost.cv?
- vue.js - Apollo graphql 在 localhost 上发送请求,而不是指定 ep
- mysql - 计算表中未引用的行数
- c++ - C ++异步等待响应,最佳设计?
- vb.net - 修复 VB.NET 中的 Veracode CWE ID 117(不正确的日志输出中和)