xml - 使用 Shell 脚本将 XML 文件的标签存储在数组中
问题描述
我有一个格式为 XML 的文件:
<classes>
<subject>
<name>Operating System</name>
<credit>3</credit>
<type>Theory</type>
<faculty>Prof. XYZ</faculty>
</subject>
<subject>
<name>Web Development</name>
<credit>3</credit>
<type>Lab</type>
</subject>
</classes>
我想使用 Shell 脚本将标签名称(即名称、信用、类型、教师)存储在一个数组中。
我尝试使用awk
命令:
awk -F'[<>]' '/<name>|<credit>|<type>|<faculty>/{print $2}' file.xml
但它的返回值如下:
name
credit
type
faculty
name
credit
type
如何将这些结果存储在数组中?
解决方案
如果您控制 xml 的来源,我理解手动解析它的诱惑。但是这种方法有很多问题。使用 xml 库来解析 xml 会更安全。
这是一种使用 libxml 及其命令行界面 xsltproc 的方法:
xsltproc classes.xsl classes.xml
类.xsl:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:template match="/classes/subject/*">
<xsl:text>	</xsl:text>
<xsl:value-of select="name(.)" /><xsl:text>:	</xsl:text>
<xsl:value-of select="." /><xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="/classes/subject/name">
<xsl:text>'</xsl:text>
<xsl:value-of select="." />
<xsl:text>':
</xsl:text>
</xsl:template>
</xsl:stylesheet>
输入:
<?xml version="1.0"?>
<classes><subject><name>Operating System</name><credit>3</credit><type>Theory</type><faculty>Prof. XYZ</faculty></subject><subject><name>Web Development</name><credit>3</credit><type>Lab</type></subject></classes>
输出:
'Operating System':
credit: 3
type: Theory
faculty: Prof. XYZ
'Web Development':
credit: 3
type: Lab
当我对 xml 进行切片和切块时,有人花时间向我解释了这一点。现在我付钱了。
推荐阅读
- c# - Crystal Report 中的 LinqToSql 查询返回 SystemNotSupportedException
- r - 使用 replaceData 函数替换 R 格式数据表中的数据
- reactjs - Webpack 无法使用 ` 导入 React 组件
- c# - 如何修改控制内容(创建新内容并稍后恢复旧内容)C#?
- mongodb - 就绪探测失败:MongoDB shell 版本 v4.0.10
- java - 链接 - 列表移动列表中的最后一个对象后退
- typescript3.0 - Typescript,如何避免构造函数中的代码重复?
- ios - iOS FirebaseCloudMessaging 通知在调试/试飞或发布中不起作用
- python - json 无法正确加载数据
- javascript - 如何使用javascript在html页面中动态创建元素?