bash - 使用 xmlstarlet 添加缺失的元素?
问题描述
我有许多包含多个地址的供应商记录,例如
<vendor>
<addresses>
<address primary="yes">
<line1 />
<city />
<state />
....
</address>
<address primary="no">
<line1 />
<city />
<state />
....
</address>
</addresses>
</vendor>
缺少一些必需的元素——阻止更新记录。如果缺少默认值,可以使用 xmlstarlet 添加元素吗?
解决方案
这是一个简单的例子。我将xmllint --auto
用于 xml 源。然后,我们将使用身份转换模式添加一个<add-me>
元素作为其子元素<info>
是否不存在。
源代码:
xmllint --auto
<?xml version="1.0"?>
<info>abc</info>
添加缺少的元素:
xmllint --auto | xsltproc add-missing.xsl -
<?xml version="1.0"?>
<info><add-me>some stuff</add-me>abc</info>
添加缺失.xsl:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="info">
<xsl:copy>
<xsl:if test="not(add-me)">
<add-me>some stuff</add-me>
</xsl:if>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- javascript - React 16 状态测试
- html - 如何使用 mat-icon 创建可收藏的材料链接
- python - 在 Python 和 Selenium 中,如何在 headless chrome 中填写打开的对话框?
- javascript - 如何将数组从 json 结果拆分为 2 个新数组
- java - 应为字符串,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT
- python - 正则表达式两组匹配所有内容,直到模式
- svn - svn 显示没有更改,但 windows 在文件夹旁边显示更改的图标
- java - 通过 android studio 安装有效,但手动安装 apk 无效
- php - 使用正则表达式和 php 从 html 中提取 javascript 对象
- javascript - drawImage() 不工作