【发布时间】:2016-10-26 09:07:18
【问题描述】:
我有一个这样的平面文件:
File:
# Environment
Application.Env~DEV
# Identity
Application.ID~999
# Name
Application.Name~appname
这样的 XML:
<name>Application/Env</name>
<value>XXX</value>
<name>Application/ID</name>
<value>000</value>
<name>Application/Name</name>
<value>AAA</value>
我正在寻找一个脚本(awk、sed 等)来读取平面文件并将 xml 中 <value> 标记中的所有数据替换为 <name> 标记匹配时在 ~ 之后找到的数据~之前的数据。最终生成的 XML 将如下所示:
<name>Application/Env</name>
<value>DEV</value>
<name>Application/ID</name>
<value>999</value>
<name>Application/Name</name>
<value>appname</value>
感谢您的帮助!
【问题讨论】:
-
顺便说一句,您的“像这样的 XML”实际上并不足以验证其正确性。标头很重要——如果您正在处理的 XML 文件以
<root xmlns="foo">开头,这意味着与刚刚以<root>开头的情况完全不同。 -
ocbit:
sed、awk等无法可靠地处理 XML -- 语法根本不是上下文无关的,这意味着您需要跟踪在之前的标签中看到了哪些xmlns属性,无论您是否在评论中,您是否在 CDATA 部分中,等等。决定在任何给定时间做什么。 (这是在处理实体扩展或需要转义以避免破坏语法的值之前)。另见相关stackoverflow.com/a/1732454/14122