मैं नीचे XSLT में अपेक्षित आउटपुट कैसे प्राप्त कर सकता हूँ?


मेरे पास निम्नलिखित 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>

コメント

タイトルとURLをコピーしました