2009-12-11 10 views
15

का उपयोग कर तत्वों को निकालने और डंप करने के लिए मैं xmlstarlet का उपयोग कर अपने एक्सएमएल से तत्व निकालने और मुद्रित करने का एक तरीका ढूंढ रहा हूं; उदाहरण के लिए अगर मेरे एक्सएमएलxmlstarlet

<?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> 

मैं कीमत के साथ पुस्तक तत्व बाहर मुद्रित करने के लिए = 29.99 के रूप में चाहते हैं:

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

मैं xpath क्वेरी को समझने के इस तरह के एक तत्व का चयन करने के लिए (/ किताबों की दुकान/पुस्तक [ मूल्य = 2 9.9 9]) लेकिन मैं इसे stdout पर प्रिंट/डंप करने में सक्षम नहीं हूं। यदि मैं '-v' विकल्प का उपयोग करता हूं और -v (।) का उपयोग करता हूं तो मुझे आउटपुट नहीं मिलता है जैसा कि मैं चाहता हूं (इसमें सभी टैग के साथ) मुझे बस टेक्स्ट मान मिलते हैं। चयनित तत्व को बस डंप करने का एक तरीका होना चाहिए जैसा कि यह है, और यही वह है जिसे मैं ढूंढ रहा हूं।

प्रत्याशा में धन्यवाद।

उत्तर

15

"-c" (कॉपी) विकल्प का उपयोग करना, प्राप्त करना चाहिए के बाद आप क्या कर रहे हैं:

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

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

आप कर सकते हैं के बाद वैश्विक स्विच जोड़ने "-सी" द्वारा xmlstarlet में आंतरिक रूप से उत्पन्न XSLT घड़ी " sel "। यह दिखाता है कि एक xslt में प्रतिलिपि विकल्प परिणाम कॉपी-का निर्माण:

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

यह नाम स्थान नोड्स, बच्चे नोड्स में परिणाम है, और नोड्स गुण शामिल करने, cf. एक्सएसएलटी स्पेक (see w3schools summary)

+0

इसके लिए धन्यवाद, यह काम किया! – shrijeet

+0

एसओ 6 चरित्र न्यूनतम परिवर्तन सीमा से बचने के लिए कई पात्रों को बदलना पड़ा। मेरे लिए तब तक काम नहीं करेगा जब तक कि मैं विशेषता के सामने @ डालता हूं, यानी कीमत = 29.99 –

+0

धन्यवाद के बजाय @ कीमत = 2 9.99 धन्यवाद .. मैंने लगभग एक महीने इस-सी स्विच की तलाश में बिताया। – ifelsemonkey