我需要在 XML 文件中将某些指定标签中的特定字符串替换为嵌入在标签中的其他字符串。
搜索每次出现的示例,仅当它在标签内(在其他标签内)时才an example
需要替换:<b>a test</b>
<a> ... </a>
- 输入示例:
<c>This is an example. <a>This is an example;</a></c>
- 期望的输出:
<c>This is an example. <a>This is <b>a test;</b></a></c>
我需要在 XML 文件中将某些指定标签中的特定字符串替换为嵌入在标签中的其他字符串。
搜索每次出现的示例,仅当它在标签内(在其他标签内)时才an example
需要替换:<b>a test</b>
<a> ... </a>
<c>This is an example. <a>This is an example;</a></c>
<c>This is an example. <a>This is <b>a test;</b></a></c>
好像你想
an example;
中节点的值中删除文本,以及/c/a
/c/a
向名为的节点添加一个子节点b
,其值为a test;
。xmlstarlet
您可以在 shell中轻松地做到这一点:对问题中示例文档的第一次调用
xmlstarlet
将导致以下输出,其中一些文本从/c/a
节点的值中删除:第二次调用采用此修改后的文档并通过引入
/c/a/b
节点生成以下内容:xmlstarlet
调用可以组合成单个命令。下面,我使用了长选项,也--inplace
用于对原始文档进行就地编辑(这仅用于说明,您应该--inplace
先运行而不确定转换是否有效):将上述内容概括为对包含文本的任何
a
节点执行两次编辑的内容an example;
(这是问题中实际要求的内容):这里唯一的新事物是我们首先将要编辑的所有节点的路径存储在内部变量
$paths
中。--update
然后我们在和--subnode
修改中引用这些路径。