Ksh
從文件名有空格的文件中提取 xml 標記值
我有一個文件“EXXARS - 美國實物庫存調整報告 PDF_es_ES.xlf”
檔案資料:
<header> <prop-group name="ora_reconstruction"> <prop prop-type="TemplateCode">XXPO_PHYS_INV_ADJ_ES_AS</prop> <prop prop-type="extractorVersion">10.1.3.4.2_1.5</prop> </prop-group>
我需要提取和結果之間的值:我需要變數 XXPO_PHYS_INV_ADJ_ES_ES 中的這個值。
我有一個不工作的庫曼德
filename='ES - Physical Inventory Adjustment Report US PDF_es_ES.xlf' sed -n 's:.*<prop prop-type="TemplateCode">\(.*\)</prop>.*:\1:p' filename > ${LOBCODE} echo " --> ${LOBCODE}"
假設 XML 文件格式正確:
<?xml version="1.0"?> <header> <prop-group name="ora_reconstruction"> <prop prop-type="TemplateCode">XXPO_PHYS_INV_ADJ_ES_AS</prop> <prop prop-type="extractorVersion">10.1.3.4.2_1.5</prop> </prop-group> </header>
使用XMLStarlet:
xmlfile='ES - Physical Inventory Adjustment Report US PDF_es_ES.xlf' LOBCODE=$( xml sel -t -v '//prop[@prop-type="TemplateCode"]' "$xmlfile" )
這使用 XMLStarlet 來提取屬性為的
prop
節點的值。該變數將使用上述 XML 獲取值。prop-type``TemplateCode``LOBCODE``XXPO_PHYS_INV_ADJ_ES_AS
XMLStarlet 有時可能安裝為
xmlstarlet
而不是xml
.您的程式碼有兩個問題:
- 您將
sed
命令的輸出重定向到名稱由 給出的文件$LOBCODE
。如果$LOBCODE
為空,則此重定向將失敗。我假設您想要做的是將 的輸出分配給sed
變數LOBCODE
。如上所示,這是通過命令替換完成的。請注意,這sed
是解析 XML 數據的工具的糟糕選擇。- 您指示
sed
使用名為filename
. 要sed
處理變數的值,filename
您需要$
在變數名前面使用。此外,由於文件名中有空格,因此您需要對變數擴展加雙引號(無論如何,您都應該這樣做)。因此您應該使用"$filename"
(我在上面的程式碼中使用了更具描述性的變數名稱)。