如何根据标签的内容更改 XML 文件

Posted

技术标签:

【中文标题】如何根据标签的内容更改 XML 文件【英文标题】:How do I alter a XML-File based on the content of tags 【发布时间】:2022-01-20 08:24:10 【问题描述】:

我有超过 3k 行的 XML 格式文件。

结构总是相同的,并在重复中与此相对应:

...
<Placemark>
        <name> Text</name>
        <description><![CDATA[]]></description>
        <Point>
            <coordinates>x, y, z</coordinates>
        </Point>
        <Style>
            <IconStyle>
                <Icon>
                    icon
                </Icon>
            </IconStyle>
        </Style>
</Placemark>
...

我想根据来自namedescription 的信息更改Style 块,因此如果出现某个单词,请将现有的Style 块替换为某个其他Style 块。将有少于 20 个不同的Style 块和“触发词”。整个事情应该为每个文件运行一次。

如果我必须编写代码,使用哪种语言和使用哪些框架? 或者您知道可以执行此操作的应用程序吗?

【问题讨论】:

【参考方案1】:

听起来像是 XSLT 的工作。您可以从身份转换开始,然后为生成不同 Style 内容的每个“触发词”添加专门的模板,具体取决于 namedescription 是否具有任何“触发词”。

带有“triggerWord”和“otherTriggerWord”的专用Style模板的示例XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    
  <xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
    
  <xsl:template match="Placemark[(name,description)[contains(., 'triggerWord')]]/Style">
    <Style>
      <!--custom style content for triggerWord-->
    </Style>
  </xsl:template>
    
    
  <xsl:template match="Placemark[(name,description)[contains(., 'otherTriggerWord')]]/Style">
    <Style>
      <!--custom style content for otherTriggerWord-->
    </Style>
  </xsl:template>

</xsl:stylesheet>

【讨论】:

以上是关于如何根据标签的内容更改 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何根据标签的属性名称选择两个标签之间的 xml 文件中的所有节点?

如何循环多个子文件夹并根据特定的 XML 标签重命名文件?

调整实际图像大小后更改图像标签 .xml

Mybatis模糊查询——三种定义参数方法和聚合查询主键回填

如何在 OpenERP7 视图中更改 XML 标签?

如何在解析之前检查 XML 中是不是存在属性和标签?