从 XML 的多个相似标签中获取特定标签
Get Specific Tags from Multiple Similar Tags of 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>
我只想得到 类 的结果 'type' = 'Theory' using Shell Script .
我尝试使用:
awk -F'[<>]' '/<name>|<credit>|<type>|<faculty>/{print }' file.xml
但此命令返回 xml 标签的每个字段。
即
Operating System
3
Theory
Prof. XYZ
Web Development
3
Lab
寻找在存在多个标签时仅获取特定标签值的解决方案。
TIA。
能否请您尝试以下,我不是专家xamlstarlet
在这里尝试一下。
xmlstarlet sel -t -v "classes" Input_file |
awk '
NF{
gsub(/^[[:space:]]+|[[:space:]]+$/,"")
print
}'
简要说明: 使用 xmlstarlet
处理 xml 文件然后输出格式我使用 awk
(在 xml 处理后)从输出中删除不必要的空格和换行。
编辑: 因为 OP 告诉他不能在系统中安装 xmlstarlet
所以添加 awk
解决方案但公平警告 awk
不是 xml 的工具,仅通过查看显示的示例添加了以下解决方案。
awk -F"[><]" '
/<\/subject>/{
if(found){
print val
}
found=val=""
next
}
/<subject>/{
found=1
next
}
found{
val=(val?val ORS:"")
}
' Input_file
我有一个 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>
我只想得到 类 的结果 'type' = 'Theory' using Shell Script .
我尝试使用:
awk -F'[<>]' '/<name>|<credit>|<type>|<faculty>/{print }' file.xml
但此命令返回 xml 标签的每个字段。
即
Operating System
3
Theory
Prof. XYZ
Web Development
3
Lab
寻找在存在多个标签时仅获取特定标签值的解决方案。
TIA。
能否请您尝试以下,我不是专家xamlstarlet
在这里尝试一下。
xmlstarlet sel -t -v "classes" Input_file |
awk '
NF{
gsub(/^[[:space:]]+|[[:space:]]+$/,"")
print
}'
简要说明: 使用 xmlstarlet
处理 xml 文件然后输出格式我使用 awk
(在 xml 处理后)从输出中删除不必要的空格和换行。
编辑: 因为 OP 告诉他不能在系统中安装 xmlstarlet
所以添加 awk
解决方案但公平警告 awk
不是 xml 的工具,仅通过查看显示的示例添加了以下解决方案。
awk -F"[><]" '
/<\/subject>/{
if(found){
print val
}
found=val=""
next
}
/<subject>/{
found=1
next
}
found{
val=(val?val ORS:"")
}
' Input_file