2009-12-11 14 views
15

Kullanarak çıkarma ve boşaltma öğeleri xmlstarlet kullanarak xmlümden bir öğe ayıklamak ve yazdırmak için bir yol arıyorum; (/ Kitabevi/kitap [I xpath sorgusu anlıyorumxmlstarlet

<book> 
    <title lang="eng">Harry Potter</title> 
    <price>29.99</price> 
</book> 

böyle bir öğe seçmek için: Örneğin benim xml

<?xml version="1.0" encoding="ISO-8859-1"?> 

<bookstore> 

<book> 
    <title lang="eng">Harry Potter</title> 
    <price>29.99</price> 
</book> 

<book> 
    <title lang="eng">Learning XML</title> 
    <price>39.95</price> 
</book> 

</bookstore> 

I = olarak 29.99 fiyat ile kitap elemanı yazdırmak istiyoruz ise price = 29.99]) ama Stdout'ta yazdıramam ya da dökemiyorum. '-v' seçeneğini kullanırsam ve -v (.) Kullanırsam çıktıyı istediğim gibi alamazsam (içindeki tüm etiketlerle) sadece metin değerlerini alırım. Seçilmiş öğeyi olduğu gibi bırakmanın bir yolu olmalıydı, ve ben de aradığım şey bu.

Beklentileriniz için teşekkürler. "-c" (kopya) seçeneği kullanarak

cevap

15

, ulaşmalıdır sen sonra ne:

xmlstarlet sel -t -c "/bookstore/book[price=29.99]" books.xml 

<book> 
    <title lang="eng">Harry Potter</title> 
    <price>29.99</price> 
</book> 

yapabilirsiniz küresel ekleyerek "-C" anahtarını sonra tarafından xmlstarlet dahili oluşturulan XSLT izle " sel". Bu, bir XSLT'de kopya seçeneği sonuçları kopyalama-of nasıl yapı gösterir: Bu ad düğümler, alt düğümleri de

... 
<xsl:template name="t1"> 
    <xsl:copy-of select="/bookstore/book[price=29.99]"/> 
</xsl:template> 
... 

ve eklenmesini, cf. düğümlerini bağlıyor XSLT özellikleri (see w3schools summary).

+0

Bunun için teşekkürler, işe yaradı! – shrijeet

+0

SO 6 karakter minimum değişim sınırından kaçmak için, bir takım karakterleri değiştirmek zorunda kaldı. Bu özelliği, @ karakterini fiyatın yerine koymak yerine, yani fiyat = 29.99 yerine 0 = 29.99 –

+0

gönderdiğimde işe yaramazdım. Teşekkürler .. Bu -c anahtarını aramak için neredeyse bir ay harcadım. – ifelsemonkey