linux下awk或者sed命令脚本读取xml的问题

wangshuo985 2012-05-25 02:18:53
<?xml version="1.0" encoding="UTF-8" ?>
<a>
<b type="server">
<c>16270</c>
</b>
<b1 type="server">
<c>112</c>
</b1>
<d type="client">
<c>112</c>
</d>


</a>
xml内容如上,请问怎么将type属性为server时,读取c标签的内容打印出来,或者赋给某个变量port。
最后结果是port= 16270 ,112.当属性为client时,port=112.
如何用awk或者sed命令读取出来,有高手能帮忙给个答案吗?
...全文
321 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-05-28
  • 打赏
  • 举报
回复
别开玩笑了, XML是awk/sed能解析的吗, 没灵活性。
wangshuo985 2012-05-28
  • 打赏
  • 举报
回复
楼上能用sed或者awk命令解析下吗?php解析我这里暂时用不上,希望linux高手能帮忙一下,谢谢!分不够可以追加。
qq120848369 2012-05-25
  • 打赏
  • 举报
回复
[User:root Time:16:01:38 Path:/home/liangdong/php]$ cat xml.php 
<?php
$content = <<<EOF
<?xml version="1.0" encoding="UTF-8" ?>
<a>
<b type="server">
<c>16270</c>
</b>
<b1 type="server">
<c>112</c>
</b1>
<d type="client">
<c>112</c>
</d>
</a>
EOF;

$xml = simplexml_load_string($content, "SimpleXMLElement", LIBXML_NOBLANKS, "", false);
echo "-----server-----" . PHP_EOL;
$server_c = $xml->xpath('//*[@type="server"]/c');
foreach ($server_c as $node) {
echo $node->{0} . PHP_EOL;
}
echo "-----client-----" . PHP_EOL;
$client_c = $xml->xpath('//*[@type="client"]/c');
foreach ($client_c as $node) {
echo $node->{0} .PHP_EOL;
}
?>
[User:root Time:16:01:39 Path:/home/liangdong/php]$ php xml.php
-----server-----
16270
112
-----client-----
112


php, 祝你成功。
wangshuo985 2012-05-25
  • 打赏
  • 举报
回复
楼上能详细介绍下你这个命令的的意思吗?我刚测试下了,获取不了想要的东西?谢谢了!要不加我个QQ150382705,谢谢!
justkk 2012-05-25
  • 打赏
  • 举报
回复
试试
awk -F">|<" 'a==1{a=0;print $3} $0~/server/{a=1}' yourfile

18,777

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧