xslt - How to select a node and its siblings until the same node from the start occurs -


यह शायद मुश्किल सवाल है।

मेरे पास यह दस्तावेज़ है:

 < कोड> & lt; html & gt; & Lt; h1 & gt; TITLE1 & lt; / h1 & gt; & Lt; p & gt; सामग्री & lt; / p & gt; & LT; ul & gt; & Lt; li & gt; आइटम & lt; / li & gt; & Lt; / ul & gt; & Lt; h1 & gt; TITLE2 & lt; / h1 & gt; & Lt; p & gt; सामग्री & lt; / p & gt; & Lt; p & gt; एक अन्य सामग्री & lt; / p & gt; & Lt; h1 & gt; title3 & lt; / h1 & gt; & LT; ol & gt; & Lt; li & gt; & lt; p & gt; पाठ & lt; / p & gt; & lt; / li & gt; & Lt; / ol & gt; & Lt; / html & gt;  

यह उदाहरण दिखाता है कि मेरे पास कुछ html है जहां "अनुभाग" सुर्खियों में विभाजित हैं I यह शीर्षक है, फिर तत्वों के विभिन्न मिश्रण और फिर फिर से शीर्षक।

मैं इन वर्गों को div से XSLT 2 का उपयोग करके लिपटे जाना चाहता हूं।

इसलिए, मैं & lt; h1 & gt; समूह चुनने के लिए शीर्षक मूल रूप से समूह नियम है:

  • h1 और उसके सभी भाई-बहन का चयन जब तक कि एक अन्य h1 नहीं होता है।

"और" पर यह तनाव बहुत महत्वपूर्ण है क्योंकि मैं XPath फ़ार्मुलों के साथ आया था जो केवल h1 नोड्स के बीच नोड्स का चयन करते हैं या चयन करते हैं सबसे पहले पिछले h1 को h1 को उन दोनों के बीच अनदेखा करना। मुझे उस शीर्षक को भी प्राप्त करना होगा मुझे नहीं लगता कि यह XPath के साथ हासिल करना मुश्किल है, लेकिन मैं इसे काम नहीं कर सकता।

सबसे अच्छा समझने के लिए, यह ऐसा दिखना चाहिए कि यह कैसा दिखना चाहिए:

  & lt; html & gt; & Lt; div & gt; & Lt; h1 & gt; TITLE1 & lt; / h1 & gt; & Lt; p & gt; सामग्री & lt; / p & gt; & LT; ul & gt; & Lt; li & gt; आइटम & lt; / li & gt; & Lt; / ul & gt; & Lt; / div & gt; & Lt; div & gt; & Lt; h1 & gt; TITLE2 & lt; / h1 & gt; & Lt; p & gt; सामग्री & lt; / p & gt; & Lt; p & gt; एक अन्य सामग्री & lt; / p & gt; & Lt; / div & gt; & Lt; div & gt; & Lt; h1 & gt; title3 & lt; / h1 & gt; & LT; ol & gt; & Lt; li & gt; & lt; p & gt; पाठ & lt; / p & gt; & lt; / li & gt; & Lt; / ol & gt; & Lt; / div & gt; & Lt; / html & gt;  

आप इस के लिए समूह-प्रारंभ से का उपयोग कर सकते हैं :

  & lt; xsl: स्टाइलशीट संस्करण = "2.0" xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" & gt; & Lt; xsl: आउटपुट विधि = "xml" इंडेंट = "हां" / & gt; & Lt; xsl: टेम्पलेट मैच = "html" & gt; & LT; XSL: प्रतिलिपि & gt; & Lt; xsl: प्रत्येक समूह के लिए चुनें = "नोड ()" समूह-प्रारंभ-के साथ = "एच 1" & gt; & Lt; div & gt; & Lt; xsl: कॉपी-का चयन करें = "वर्तमान-समूह ()" / & gt; & Lt; / div & gt; & Lt; / XSL: के लिए-प्रत्येक समूह & gt; & Lt; / XSL: प्रतिलिपि & gt; & Lt; / XSL: टेम्पलेट & gt; & Lt; / XSL: स्टाइलशीट & gt;  

आपके नमूने पर चलते समय, इसका परिणाम है:

  & lt; html & gt; & Lt; div & gt; & Lt; h1 & gt; TITLE1 & lt; / h1 & gt; & Lt; p & gt; सामग्री & lt; / p & gt; & LT; ul & gt; & Lt; li & gt; आइटम & lt; / li & gt; & Lt; / ul & gt; & Lt; / div & gt; & Lt; div & gt; & Lt; h1 & gt; TITLE2 & lt; / h1 & gt; & Lt; p & gt; सामग्री & lt; / p & gt; & Lt; p & gt; एक अन्य सामग्री & lt; / p & gt; & Lt; / div & gt; & Lt; div & gt; & Lt; h1 & gt; title3 & lt; / h1 & gt; & LT; ol & gt; & Lt; li & gt; & Lt; p & gt; पाठ & lt; / p & gt; & Lt; / li & gt; & Lt; / ol & gt; & Lt; / div & gt; & Lt; / html & gt;  

अतिरिक्त जानकारी के रूप में, यदि आप समूह-द्वारा का उपयोग करना चाहते हैं, तो आप ऐसा कर सकते हैं:

  & lt; xsl: प्रत्येक समूह का चयन करें = "नोड ()" समूह-दर = "स्व: h1 | पूर्ववर्ती-सिब्लिंग :: एच 1 [1]" & gt;  

और इससे एक ही परिणाम उत्पन्न करना चाहिए।


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -