Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML打印Bash中的每一行_Xml_Bash_Xml Parsing - Fatal编程技术网

XML打印Bash中的每一行

XML打印Bash中的每一行,xml,bash,xml-parsing,Xml,Bash,Xml Parsing,我有一个API,工作良好。我提取的XML数据如下所示: <?xml version="1.0" encoding="UTF-8"?> <buildings> <size> 7 </size> <building> <id> 1 </id> <name> Firs

我有一个API,工作良好。我提取的XML数据如下所示:

<?xml version="1.0" encoding="UTF-8"?>
  <buildings>
    <size>
      7
    </size>
      <building>
        <id>
          1
        </id>
          <name>
             First Building
          </name>
      </building>
      <building>
         <id>
           2
         </id>
           <name>
             Second Building
           </name>
      </building>
   </buildings>
我试过:

IDS=$(*fullcommand* | awk -F'>|<' '/<name>/ {print $3}')
printf '%s\n' $IDS
任何帮助都会很棒。
如果您想在name和/name之间切换,谢谢

sed -n '/<name>/,/<\/name>/p' | grep -v '^ *<' | sed 's/^ *//'
输出:

First Building Second Building
不要使用awk来解析某些XML,但可以看看任何XML解析器,如xmlint或xmlstarlet。它们使用非常强大的类似正则表达式的表达式,称为XPath。这样,您将100%健壮。请在引号中加上$id。一般来说,你应该总是引用变量,除非你有很好的理由不引用。我是一个noob。尝试这种健壮的方式:$xmlstarlet sel-t-m//Building-v name-n file.xml equallanent:。使用xmlparser的原因是,对fullcommand的更新可能会创建格式不同的XML输出,而命令可能会失败。这是否回答了您的问题?我建议使用XML/HTML解析器xmlstarlet、xmllint……这样更好,但这取决于用户2720970想要什么。
sed -n '/<name>/,/<\/name>/p' | grep -v '^ *<' | sed 's/^ *//'
xmlstarlet select --template --match '//name' --value-of 'normalize-space()' -n file
First Building Second Building