如何在XML标签之间添加一个字符串,该字符串的值是从文本文件获取的? (重击)

问题描述 投票:0回答:1

我有一些 XML 标签名称存储在一个文本文件中,这是一个 XML 文件,我想在其中添加相同的字符串作为这些标签的另一个值。

XML 标签文件:

name1
name2
name3

XML 文件:

<Category name="name1">value1 value2 value3 ...</Category>
<Category name="name2">value1 value2 value3 ...</Category>
<Category name="name3">value1 value2 value3 ...</Category>

我尝试了几十个“sed”、“cat”命令,但非常痛苦......我期望在使用脚本/命令后,XML 文件会如下所示:

<Category name="name1">VALUE4 value1 value2 value3 ...</Category>
<Category name="name2">VALUE4 value1 value2 value3 ...</Category>
<Category name="name3">VALUE4 value1 value2 value3 ...</Category>

(VALUE4是我要添加的字符串,我想将它添加为第一个值!)

提前感谢您的帮助!

勒普松

xml bash xml-parsing
1个回答
0
投票

这项工作的工具是 XSLT。

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSLTransform"
               version="3.0"
               expand-text="yes"/>

  <xsl:variable name="tags" 
                select="tokenize(unparsed-text('tags-file.txt'))"/>

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="Category[@name=$tags]/text()">
    <xsl:text>VALUE4 {.}</xsl:text>
  </xsl:template>

</xsl:transform>

我在这里使用了XSLT 3.0。 1.0 处理器的使用范围更广,但这使得代码更加冗长。

不要尝试使用基于文本的工具来执行此操作。正如您所发现的,正确执行它是一件很痛苦的事情,当您成功时,只要有人提供与您测试的文件稍有不同的 XML 文件,您的代码就会失败。

© www.soinside.com 2019 - 2024. All rights reserved.