Linux
如何從xml中刪除標籤
我有以下 XML 文件:
<?xml version="1.0" encoding="utf-8"?> <deviceID>IO238470374109730497</devicdeID> <KeyValuePairs> <KeyValuePair> <BASE-URL>2</BASE-URL> <Key>2</Key> <Value>2</Value> </KeyValuePair> <KeyValuePair> <BASE-URL>3</BASE-URL> <Key>3</Key> <Value>3</Value> </KeyValuePair> </KeyValuePairs>
我只想刪除此部分:
<KeyValuePair> <BASE-URL>3</BASE-URL> <Key>3</Key> <Value>3</Value> </KeyValuePair>
我想要實現的是刪除裡面的內容,
<KeyValuePair>
只包括這些特定<BASE-URL>
的 ,<Key>
和<Value>
. 元<KeyValuePair>
組始終是唯一的,不會重複,但可以是一個或多個。我怎樣才能使用 bash 做到這一點?
您的範例不是有效的 XML 文件。我通過
<root/>
在文件周圍添加一個元素(並在結束</deviceID>
標記中修復你的錯字)稍微改變了它:<?xml version="1.0" encoding="utf-8"?> <root> <deviceID>IO238470374109730497</deviceID> <KeyValuePairs> <KeyValuePair> <BASE-URL>2</BASE-URL> <Key>2</Key> <Value>2</Value> </KeyValuePair> <KeyValuePair> <BASE-URL>3</BASE-URL> <Key>3</Key> <Value>3</Value> </KeyValuePair> </KeyValuePairs> </root>
現在可以使用 XML 編輯工具來編輯您的 XML。這個 XPath 表達式告訴
xmlstarlet
刪除具有文本值的 XML 元素<KeyValuePair/>
(及其內容)。<BASE-URL/>``3
xmlstarlet ed -d '//KeyValuePair[BASE-URL/text()="3"]' /tmp/500185.xml
輸出是
<?xml version="1.0" encoding="utf-8"?> <root> <deviceID>IO238470374109730497</deviceID> <KeyValuePairs> <KeyValuePair> <BASE-URL>2</BASE-URL> <Key>2</Key> <Value>2</Value> </KeyValuePair> </KeyValuePairs> </root>