gpt4 book ai didi

xml - 如何从 shell 脚本中递归读取 xml 数据

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:20 26 4
gpt4 key购买 nike

我正在尝试使用 shell 脚本代码获取 xml 数据。当前的 Shell 脚本代码是 @Copy ⇒ enter link description here

#!/bin/bash
xmlFile=$1

function parseXML() {
elemList=( $(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep -e "</.*>$" | while read line; do \
echo $line | sed -e 's/^.*<\///' | cut -d '>' -f 1; \
done) )

totalNoOfTags=${#elemList[@]}; ((totalNoOfTags--))
suffix=$(echo ${elemList[$totalNoOfTags]} | tr -d '</>')
suffix="${suffix}_"

for (( i = 0 ; i < ${#elemList[@]} ; i++ )); do
elem=${elemList[$i]}
elemLine=$(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep "</$elem>")
echo $elemLine | grep -e "^</[^ ]*>$" 1>/dev/null 2>&1
if [ "0" = "$?" ]; then
continue
fi
elemVal=$(echo $elemLine | tr '\011' '\040'| sed -e 's/^[ ]*//' -e 's/^<.*>\([^<].*\)<.*>$/\1/' | sed -e 's/^[ ]*//' | sed -e 's/[ ]*$//')
echo "$elemVal" #output
xmlElem="${suffix}$(echo $elem | sed 's/-/_/g')"
eval ${xmlElem}=`echo -ne \""${elemVal}"\"`
attrList=($(cat $xmlFile | tr '\n' ' ' | XMLLINT_INDENT="" xmllint --format - | /bin/grep "</$elem>" | tr '\011' '\040' | sed -e 's/^[ ]*//' | cut -d '>' -f 1 | sed -e 's/^<[^ ]*//' | tr "'" '"' | tr '"' '\n' | tr '=' '\n' | sed -e 's/^[ ]*//' | sed '/^$/d' | tr '\011' '\040' | tr ' ' '>'))
for (( j = 0 ; j < ${#attrList[@]} ; j++ )); do
attr=${attrList[$j]}
((j++))
attrVal=$(echo ${attrList[$j]} | tr '>' ' ')
attrName=`echo -ne ${xmlElem}_${attr}`
eval ${attrName}=`echo -ne \""${attrVal}"\"`
done
done
}

parseXML

并且,当前的 XML 结构是

 <root>
<abc>
<name>zzz</name>
<email>zzz@gmail.com</email>
<phno>1234589</phno>
</abc>
<abc>
<name>aaaa</name>
<email>aa@gmail.com</email>
<phno>2456677</phno>
</abc>
</root>

当前输出是

**

aaaa
aa@gmail.com
2456677
aaaa
aa@gmail.com
2456677

**

但我想得到的输出结构是

**

zzz
zzz@gmail.com
1234589
aaaa
aa@gmail.com
2456677

**

最佳答案

使用像 xmllint 或 xmlstarlet 这样的 XML 解析器。

xmlstarlet sel -t -v /root/abc file

输出:

            zzz            zzz@gmail.com            1234589            aaaa            aa@gmail.com            2456677

关于xml - 如何从 shell 脚本中递归读取 xml 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30907641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com