2013-07-31 12 views
15

"Satır başına" öznitelikleri için birden çok xpath seçici sonucunu çıkarmak için xmllint'i nasıl alabilirim?Çıkış için xmllint xpath sonuçlarına geçme n-ayrılmış, öznitelik seçicisi için

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <config> 
      <tagX key1="value1 " key2=" value2"/> 
      <tagY key3="value3" key4=" value4 "/> 
    </config> 


    $ xmllint example.xml --xpath "/config/*/@*" 

sonucudur: Ben almak istiyorum ne

key1="value1 " key2=" value2" key3="value3" key4=" value4 " 

geçerli:

key1="value1 " 
    key2=" value2" 
    key3="value3" 
    key4=" value4 " 

Ben çift sayılı, sonra ayrıldı gerekir misiniz

bu örnek alın numaralandırılmış alıntı işaretleri, ya da bunu yapmak için herhangi bir yol var mı?

ilgili soru bunun dışında about the same subject<tag>value</tag> içeriğini seçmek dışarı hakkında ve <tag attribute="value" />

+0

Bu yardımcı mı - echo 'cat/config/*/@ * [ile başlayan (isim(), "anahtar")]' | xmllint --shell input.xml' – devnull

+0

@devnull: '| grep = 've bu iyi. (aslında, hayır '[başlar-with() ...' '' '' '' '' '' '' '' '' '' '' tuş1, anahtar2 ... '' metasyntaktik değişkenler olarak kullandım, gerçek öznitelik isimleri keyfi olurdu.) –

+0

Evet, 'grep - v 've bitti! – devnull

cevap

11

Deneyebilirsin şey yok:

$ xmllint --shell inputfile <<< `echo 'cat /config/*/@*'` 

Sen grep çıktı gerekebilir olsa da, böylece istenmeyen hatları filtreleyin.

+2

Burada-doc yönlendirme tuhaftır, '<<<' cat/config/*/@ * ''' – Guss

1

soru eskidir ama aynı sorun için bir çözüm aramaya Bu yayına geldi, burada çıkış bölme sed ikame eklemek linux üzerinde benim çözüm

: Elbette

$ xmllint example.xml --xpath "/config/*/@*" | sed "s| key|\nkey|g" 

ikame ifadesi xml yapınıza ve xpath sorgunuza bağlıdır. Eğer bu bir seçenek ise

1 key1="value1 " 
    2 key2=" value2" 
    3 key3="value3" 
    4 key4=" value4 " 
+1

demek için yeterli olmalıdır. Bunun anlamı, anahtarların tutarlı isimlendirme şemasına bağlı olmasıdır (özellikler) Eğer 'key1, key2' değil 'isim, doğum tarihi' ise, bu işe yaramaz. –

2

verir Hangi nl

$ xmllint example.xml --xpath "/config/*/@*" | sed "s| key|\nkey|g" | nl 

eklerseniz

Ve hatta her satıra satır numaraları ekleyebilirsiniz yerine xmlstarlet kullanmayı deneyin:

xmlstarlet sel -t -v "/config/*/@*" example.xml

İlgili konular