【发布时间】:2019-03-20 15:04:24
【问题描述】:
我有一个具有不同 Item 的 XML,其中可能包含名为 SerialNumber 的属性 Setting。我正在尝试获取所有项目名称后跟序列号。
我的方法是使用 Notepad++ 正则表达式来获取 Item 的名称和名为 SerialNumber 的属性 Setting 的值,如下所示:
发件人0;3990 发件人3;4444 发件人4;7774
但尝试它我唯一能得到的是notepad++选择所有文本......我的快速方法是这样的:
^<Item Name="(.*)" Category=".*<Setting Name="SerialNumber">(.*)</Setting>.*</Item>
并替换:
(\1);(\2)
XML:
<Item Name="Sender0" Category="" ClassName="Cars" Schedule="" Enabled="true">
<Setting>...</Setting>
<Setting Name="SerialNumber">3990</Setting>
<Setting>...</Setting>
</Item>
<Item Name="Sender1" Category="" ClassName="Cars" Schedule="" Enabled="true">
<Setting>...</Setting>
<Setting>...</Setting>
<Setting>...</Setting>
</Item>
<Item Name="Sender2" Category="" ClassName="Cars" Schedule="" Enabled="true">
<Setting>...</Setting>
<Setting>...</Setting>
<Setting>...</Setting>
</Item>
<Item Name="Sender3" Category="" ClassName="Cars" Schedule="" Enabled="true">
<Setting>...</Setting>
<Setting Name="SerialNumber">4444</Setting>
<Setting>...</Setting>
</Item>
<Item Name="Sender4" Category="" ClassName="Cars" Schedule="" Enabled="true">
<Setting>...</Setting>
<Setting Name="SerialNumber">7774</Setting>
<Setting>...</Setting>
</Item>
希望你能帮助我,谢谢:)
【问题讨论】:
-
Regex + XML = evil evil evil ...不是我的反对意见,但 NPP 中的正则表达式在这里也不是最好的。研究使用 XML 解析器。
-
蒂姆是对的。您还可以使用哪些其他技术?例如,Powershell 是一种选择吗?
-
Regex 不起作用,因为 regex 不能与 XML 一起使用。使用一种用于 XML 处理的工具,它们的存在是有原因的。
-
确实,是的。如果处理此文件是您的任务,我建议使用 Powershell,因为该方法在 Windows 中具有零外部依赖性。如果您只是选择它作为学习正则表达式的一种方式,我建议您使用 XML 以外的东西。