![](/img/trans.png)
[英]Oracle XMLQUERY: How to find an XML node to remove based on sub-node properties?
[英]Remove nodes in xml based on sub-node value
我正在使用wordpress xml轉儲,無論出於何種原因,wordpress都已將數據庫中的每個用戶導出為每個帖子的“作者”。 為了使xml文件更易於使用,我想刪除除一個以外的所有作者節點。
這是我所擁有的一個例子:
<rss version="2.0" xmlns:excerpt="http://wordpress.org/export/1.2/excerpt/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wp="http://wordpress.org/export/1.2/">
<wp:author>
<wp:author_id>35622</wp:author_id>
<wp:author_login>some_username_1</wp:author_login>
<wp:author_email>email@address.com</wp:author_email>
<wp:author_display_name><![CDATA[some_username_1]]></wp:author_display_name>
<wp:author_first_name><![CDATA[]]></wp:author_first_name>
<wp:author_last_name><![CDATA[]]></wp:author_last_name>
</wp:author>
<wp:author>
<wp:author_id>35290</wp:author_id>
<wp:author_login>my_unique_username</wp:author_login>
<wp:author_email>email@address.com</wp:author_email>
<wp:author_display_name><![CDATA[my_unique_username]]></wp:author_display_name>
<wp:author_first_name><![CDATA[]]></wp:author_first_name>
<wp:author_last_name><![CDATA[]]></wp:author_last_name>
</wp:author>
<wp:author>
<wp:author_id>35289</wp:author_id>
<wp:author_login>some_username_2</wp:author_login>
<wp:author_email>email@address.com</wp:author_email>
<wp:author_display_name><![CDATA[some_username_2]]></wp:author_display_name>
<wp:author_first_name><![CDATA[]]></wp:author_first_name>
<wp:author_last_name><![CDATA[]]></wp:author_last_name>
</wp:author>
<wp:author>
<wp:author_id>33404</wp:author_id>
<wp:author_login>some_username_3</wp:author_login>
<wp:author_email>email@address.com</wp:author_email>
<wp:author_display_name><![CDATA[some_username_3]]></wp:author_display_name>
<wp:author_first_name><![CDATA[]]></wp:author_first_name>
<wp:author_last_name><![CDATA[]]></wp:author_last_name>
</wp:author>
乘以幾千個條目
我想刪除除此節點外的所有節點:
<wp:author>
<wp:author_id>35290</wp:author_id>
<wp:author_login>my_unique_username</wp:author_login>
<wp:author_email>email@address.com</wp:author_email>
<wp:author_display_name><![CDATA[my_unique_username]]></wp:author_display_name>
<wp:author_first_name><![CDATA[]]></wp:author_first_name>
<wp:author_last_name><![CDATA[]]></wp:author_last_name>
</wp:author>
嘗試在shell腳本中執行此操作,但是我真的不確定從哪里開始,因為我以前從未使用過xmlstarlet,因此希望能獲得任何幫助。
更新以反映我發現的數據根和解決方案:
xmlstarlet ed -d "//wp:author[wp:author_id != '35290']" file.xml > out.xml
我找到的解決方案如下:
xmlstarlet ed -d "//wp:author[wp:author_id != '35290']" file.xml > out.xml
僅從XML文件中摘錄並不能真正為我們提供完整的答案。 我將此示例數據包裝在根標簽中:
<root xmlns:wp="some.url">
...
</root
然后,您可以提供一個XPath表達式來查找您要查找的節點:所有包含“ wp:author_id”子項並具有特定值的“ wp:author”節點。
$ xmlstarlet sel -t -c '//wp:author[wp:author_id = "35289"]' file.xml
<wp:author xmlns:wp="some.url">
<wp:author_id>35289</wp:author_id>
<wp:author_login>some_username_2</wp:author_login>
<wp:author_email>email@address.com</wp:author_email>
<wp:author_display_name>some_username_2</wp:author_display_name>
<wp:author_first_name></wp:author_first_name>
<wp:author_last_name></wp:author_last_name>
</wp:author>
我發現此頁面的XPath示例很有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.