次のXMLファイル(MyXML.xml)があります。
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns3:GetAllInfoFromRest xmlns:ns2="http://com.lanuk.cfe/b2_7/service/objects" xmlns:ns3="http://com.lanuk.cfe/b2_7/service/operations">
1111,GH43567,Hamburger,GET,278598655,\n000001, ,Kunal,Bhyuo,Ramond,856 K. 98 Rd, , ,Tripura,AGT,INDIA,856987, ,S,S,S,8956,\666666
</ns3:GetAllInfoFromRest>
</S:Body>
</S:Envelope>
このxmlからSOAPコンテンツとすべてのタグ属性を削除し、文字列応答のみを取得する必要があります1111,GH43567,Hamburger,GET,278598655,\n000001, ,Kunal,Bhyuo,Ramond,856 K. 98 Rd, , ,Tripura,AGT,INDIA,856987, ,S,S,S,8956,\666666
。
awk
またはを使用してこれをどのように実行できますかsed
?
私はこのようにしてみました:
$ xgawk -lxml 'XMLATTR["xmlns:ns3"]=="http://com.lanuk.cfe/b2_7/service/operations"{print $2}' MyXML.xml
しかし、明らかに私はいくつかの間違いをして動作しないようです。誰でも他のソリューションを提案できますか?
答え1
sed/awk
本当に一般的な表現。確認するstackoverflowに対するこの回答正規表現を使用してHTML / XMLを解析するのはなぜ悪いアイデア。
XMLでは、ドキュメントのDOMを構築してから情報を見つける必要があります。次のcmdlineツールがあります。XMLスターXML文書から情報を取得できます。
ただし、sed / awkを使用してXMLを解析しないでください。
PS:もちろん、実際の生活に触れるファイルに必要な情報を抽出するための単純な正規表現を作成することもできます。たとえば、次は関連情報を含む文書の5行目を印刷します。
# stupid and naive approach:
sed '5!d' MyXML.xml
ただし、これは次のファイルを含むレイアウトの仮定を作成します。何もないXMLに関連しています。特定のファイルに対して非常に特定のジェネレータで動作することはできますが、同じ規則に従うXMLファイルで動作することは保証されません。構造(構造化されたデータはXMLのすべてです)