[ad_1]
मेरे पास निम्नलिखित xml है –
<Element> <Token>Token1</Token> <Values>1,2</Values> </Element> <Element> <Token>Token2</Token> <Values>4,5</Values> </Element> <Element> <Token>Token1</Token> <Values>7,8</Values> </Element>
और xslt का उपयोग करके, मैं इस तरह एक नोड
<मान>1,2;7,8|4,5
<Element> <Token>Token1</Token> <Values>1,2</Values> </Element> <Element> <Token>Token2</Token> <Values>4,5</Values> </Element> <Element> <Token>Token3</Token> <Values>7,8</Values> </Element>
अपेक्षित उत्पादन –
<Values>1,2|7,8|4,5</Values>
अनिवार्य रूप से यदि अलग टोकन नोड्स हैं, तो सीमांकक का उपयोग करें | <मान> नोड प्राप्त करने के लिए अन्यथा यदि समान टोकन नोड विशेषताएँ (उदाहरण की तरह) तो मर्ज करें और उपयोग करें; सीमांकक. हम XSLT 1.0 का उपयोग करके इसे कैसे प्राप्त कर सकते हैं?
मैंने क्या प्रयास किया है:
निश्चित नहीं हूं कि कैसे शुरू करूं, मैंने यह कोशिश की लेकिन काम नहीं किया –
<xsl:for-each select="//Element/Token[not(.=preceding::*)]"> <xsl:value-of select="//Element/Values"/> <xsl:if test="not(position()=last())">|</xsl:if> </xsl:for-each>
समाधान 1
xsl:sort का उपयोग इस प्रकार नहीं किया जा सकता। देखना https://stackoverflow.com/questions/42806139/using-preceding-sibling-with-with-xslsort[^].
आपकी सबसे अच्छी शर्त यह है कि इसे किसी अन्य XML नोड-सेट में सॉर्ट करें और फिर इसे पार्स करें।
निम्नलिखित कुछ हद तक काम करता है।
यह एक अतिरिक्त | जोड़ता है अंत में। XML के लिए मूल तत्व के रूप में तत्वों को भी जोड़ा।
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes" /> <xsl:key name="Token" match="Element" use="Token" /> <xsl:template match="Elements"> <xsl:apply-templates select="Element[generate-id(.)=generate-id(key('Token',Token)[1])]"/> </xsl:template> <xsl:template match="Element"> <xsl:for-each select="key('Token', Token)"> <xsl:sort select="Token"/> <xsl:value-of select="Values"/> <xsl:variable name="var1"> <xsl:value-of select="Token"/> </xsl:variable> <xsl:variable name="var2"> <xsl:value-of select="following::Token"/> </xsl:variable> <xsl:choose> <xsl:when test="not($var2='')"> <xsl:choose> <xsl:when test="not(position()=last())">;</xsl:when> <xsl:otherwise>|</xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise>|</xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet>
[ad_2]
コメント