xml - 如何更改 xml 文件的结构格式?
问题描述
我有大量的 xml 文件,我想稍微改变一下它的格式。我怎样才能做到这一点?
这是我的问题:例如,我有以下内容:
<annotation>
<folder>New1</folder>
<filename>0000065.jpg</filename>
<path>C:\Users\farshad\Desktop\New1\0000065.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>710</width>
<height>287</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>car</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>132</xmin>
<ymin>47</ymin>
<xmax>574</xmax>
<ymax>283</ymax>
</bndbox>
</object>
</annotation>
我想将其更改为以下格式:
<annotation>
<folder>New1</folder>
<filename>0000065.jpg</filename>
<source>
<database>OXFORD-IIIT Pet Dataset</database>
<annotation>OXIIIT</annotation>
<image>flickr</image>
</source>
<size>
<width>710</width>
<height>287</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>car</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<occluded>0</occluded>
<bndbox>
<xmin>132</xmin>
<ymin>47</ymin>
<xmax>574</xmax>
<ymax>283</ymax>
</bndbox>
<difficult>0</difficult>
</object>
</annotation>
非常感谢您的任何推荐。
解决方案
这种转换的常用方法是使用 XSLT。我不会为您编写代码,并且我不建议在没有先阅读该语言的基本概念的情况下使用 XSLT,但在大纲中:
定义一个处理注解元素的规则,它使用相关规则处理它的所有子元素:
<xsl:template match="annotation">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
定义处理注解子节点的默认规则,即原样复制它们:
<xsl:template match="annotation/*">
<xsl:copy-of select="."/>
</xsl:template>
定义删除<path>
元素的规则:
<xsl:template match="path"/>
定义转换<source>
元素的规则。我不知道您对此的逻辑是什么,所以我将其未完成:
<xsl:template match="source">
...
</xsl:template>
有多种 XSLT 处理器可供选择。其中许多(包括 Python 的默认处理器)仅支持 XSLT 1.0,这对于像这样的简单转换来说已经足够了。稍后您会遇到需要 XSLT 2.0 或 3.0 的更复杂的转换,因此您可能希望从具有该功能的处理器开始。
推荐阅读
- c# - 在 CefSharp V86 中禁用 SameSite Cookie 策略
- if-statement - 为什么我的 if 语句忽略了第一个 if?
- c# - 在 Android 上进行身份验证期间无法访问已关闭的流错误
- rust - 如何在 `macro_rules!` 中声明一个变量?
- css - 如何预缓存由 css font-face 规则使用的字体,该字体在其 URL 值中包含查询参数?
- python - 如何在 Python 中更改饼图切片的顺序
- swiftui - 与小部件 iOS14 中的项目交互
- javascript - 是否也可以使 HTML textarea 自动宽度?基本上都是自动宽度和自动高度?
- google-sheets - 如果日期在多个范围之间,则条件格式
- python - 即使大写锁定打开,如何在 pyautogui 中获取小写字符?