【发布时间】:2013-07-01 20:04:23
【问题描述】:
我正在使用 Powershell 脚本自动替换 xml 文件中的一些麻烦字符,例如 & ' - £
我的脚本适用于这些字符,但我也想删除双引号字符 " 但前提是它在 xml 属性中使用(不幸的是用双引号括起来)所以我显然无法删除所有双引号xml 文件中的引号,因为这将阻止属性正常工作。
我的 Powershell 脚本如下:
(Get-Content C:\test\communication.xml) |
Foreach-Object {$_ -replace "&", "+" -replace "£", "GBP" -replace "'", "" -replace "–", " "} |
Set-Content C:\test\communication.xml
我希望能够只删除构成部分 XML 属性的双引号,这些属性本身由一对双引号括起来,如下所示。 我知道 Powershell 将每一行视为一个单独的对象,所以怀疑这应该很容易,可能通过使用条件?
下面是一个示例 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Portal>
<communication updates="Text data with no double quotes in the attribute" />
<communication updates="Text data that "includes" double quotes within the double quotes for the attribute" />
</Portal>
在上面的示例中,我只想删除紧邻单词的双引号,但不包括单词 Text 左侧或单词属性右侧的双引号。 用于 XML 属性的单词会定期更改,但左双引号始终位于 = 符号的右侧,右双引号始终位于空格正斜杠组合的左侧 / 谢谢
【问题讨论】:
-
你可以菊花链
-replace操作($_ -replace "&","+" -replace "£","GBP" ...)。不需要为每个替换单独循环。 -
非常感谢 Ansgar 的小提示,我会修改我的代码。关于替换特定双引号的任何想法?
-
文件是否总是每行只有一个属性?
-
这不是有效的 XML。您可以修复源吗? XML 属性中的双引号应编码为“,例如,
<communication updates="Text data the &quot;includes&quot; double quotes within the double quotes." /> -
@ splattered- 谢谢,我知道它不是有效的 XML,这就是我希望能够删除流氓字符的原因。人类用户在文本编辑器中手动修改 XML 属性并保存 XML 文件,因此我无法修复源。流氓字符和糟糕的 XML 是不可避免的。然后将 XML 文件同步到平板电脑和 HTML 本地托管网页使用 Javascript 解析 XML 并将属性的内容作为文本添加到页面。如果用户输入了非法字符,则属性不会显示,因为无法解析 XML,或者像 ' 和 £ 这样的格式不正确
标签: xml powershell replace