xml - 如何替换包含特定短语的 xml 中的值
问题描述
这是我的 xml 文件
我的.xml
.
.
.
<Package name="czst-stewart-aerodrome" active="true"/>
<Package name="kden-denver" active="true"/>
<Package name="lemd-adolfo-suarez" active="true"/>
<Package name="omdb-dubai-intl" active="true"/>
<Package name="yssy-sydney" active="true"/>
.
.
.
我想将包含“kden”“lemd”“yssy”的行的“true”值替换为“false”,并保持其他行不变
这是我的代码,它完成了这项工作并将“真”值替换为“假”,但它为整行而不是上面提到的特定行完成了这项工作:
$filename = 'C:\path\to\my.xml'
[xml]$xml = Get-Content $filename
$xml.SelectNodes('//*[self::title or self::subtitle]') |
Where-Object { $_.'#text' -match 'true' } |
ForEach-Object { $_.'#text' = 'false' }
$xml.Save($filename)
解决方案
请尝试以下基于 XSLT 的解决方案。
输入 XML
<root>
<Package name="czst-stewart-aerodrome" active="true"/>
<Package name="kden-denver" active="true"/>
<Package name="lemd-adolfo-suarez" active="true"/>
<Package name="omdb-dubai-intl" active="true"/>
<Package name="yssy-sydney" active="true"/>
</root>
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@active[.='true'][starts-with(../@name,'kden')
or starts-with(../@name,'lemd')
or starts-with(../@name,'yssy')]">
<xsl:attribute name="active">false</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
输出 XML
<root>
<Package name="czst-stewart-aerodrome" active="true" />
<Package name="kden-denver" active="false" />
<Package name="lemd-adolfo-suarez" active="false" />
<Package name="omdb-dubai-intl" active="true" />
<Package name="yssy-sydney" active="false" />
</root>
推荐阅读
- python - 识别数据框中的元素
- javascript - 如何在 A-frame 1.0.4 中触发动画?
- python - python中matlab的等效插值是什么?
- android - 卸载应用程序后未删除 Android 房间数据库
- android - Firebase 实时数据库将子笔记中的值与另一个子笔记进行比较
- php - XPath 查找属性值是否在数组列表中
- numpy - 使用 einsum 计算 3-dim 矩阵的协方差
- c# - 在后台运行代码,Windows 窗体计时器
- python - 在 Python 中返回函数后枚举停止计数
- python - 如何使用 pyTelegramBotAPI 处理收到的联系人?