You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell从指定字符串中提取value和en字段值?

PowerShell提取XML中和标签内容的解决方案

优先推荐:用PowerShell原生XML解析(最可靠)

别用正则处理XML,太容易踩坑——XML结构稍微变点(比如标签换行、加个属性),正则就失效了。直接用PowerShell的XML对象处理才是正道:

假设你的XML字符串存在变量$testText里,比如:

<root>
  <query t="default">
    <value>morning</value>
    <en>morning</en>
  </query>
  <query t="default">
    <value>afternoon</value>
    <en>afternoon</en>
  </query>
</root>

执行以下代码就能按要求输出:

# 把字符串转成XML对象
$xml = [xml]$testText

# 遍历所有t属性为default的query节点
foreach ($queryNode in $xml.SelectNodes("//query[@t='default']")) {
    $valueContent = $queryNode.value.InnerText
    $enContent = $queryNode.en.InnerText
    Write-Host "value: $valueContent , en: $enContent"
}

备选:修正后的正则方案(仅适用于结构简单的XML)

如果你非要用正则,得调整匹配逻辑,直接抓取和标签内的内容,而不是先匹配query标签:

# 定义匹配value和en标签内容的正则
$valueRegex = '<value>(.+?)</value>'
$enRegex = '<en>(.+?)</en>'

# 提取所有value和en的内容
$valueList = [regex]::Matches($testText, $valueRegex) | ForEach-Object { $_.Groups[1].Value }
$enList = [regex]::Matches($testText, $enRegex) | ForEach-Object { $_.Groups[1].Value }

# 对应输出每一组结果
for ($idx = 0; $idx -lt $valueList.Count; $idx++) {
    Write-Host "value: $($valueList[$idx]) , en: $($enList[$idx])"
}

注意:这个方法只适合XML结构完全规整、没有嵌套或额外属性的情况,一旦XML有变化,很可能匹配失败。

内容的提问来源于stack exchange,提问作者Owais Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:06:43