से चर के साथ बाहरी तत्व तक पहुंचने के लिए मैं एक एक्सएसएल लिखने की कोशिश कर रहा हूं जो स्रोत एक्सएमएल से फ़ील्ड के एक निश्चित सबसेट को आउटपुट करेगा। यह सबसेट ट्रांसफ़ॉर्मेशन समय पर निर्धारित किया जाएगा, बाहरी नाम कॉन्फ़िगरेशन दस्तावेज़ का उपयोग करके फ़ील्ड नाम, और अन्य विशिष्ट जानकारी (जैसे पैडिंग लम्बाई)। रिकॉर्ड से अपने खेतों रिकॉर्ड तक पहुँचने के लिएप्रत्येक लूप के लिए नेस्टेड, आंतरिक लूप
- अधिक रिकॉर्ड बाहरी एक दोहराता:
तो, यह दो
for-each
छोरों है। - आंतरिक रिकॉर्ड कॉन्फ़िगरेशन फ़ील्ड को वर्तमान रिकॉर्ड से कॉन्फ़िगर करने के लिए कॉन्फ़िगरेशन XML दस्तावेज़ पर पुनरावृत्त करता है।
मैं In XSLT how do I access elements from the outer loop from within nested loops? में देखा है कि बाहर पाश में वर्तमान तत्व एक xsl:variable
में संग्रहित किया जा सकता है। लेकिन फिर मुझे फ़ील्ड नाम प्राप्त करने के लिए आंतरिक लूप के अंदर एक नया चर परिभाषित करना होगा। प्रश्न के लिए कौन सा उपज: क्या किसी पथ को एक्सेस करना संभव है जिसमें दो चर हैं?
उदाहरण के लिए, स्रोत XML दस्तावेज़ लगता है:
<configuration>
<outputField order="1">
<fieldName>field1</fieldName>
<fieldPadding>25</fieldPadding>
</outputField>
...
<outputField order="N">
<fieldName>fieldN</fieldName>
<fieldPadding>10</fieldPadding>
</outputField>
</configuration>
XSL मैं अब तक मिल गया है:
<data>
<dataset>
<record>
<field1>value1</field1>
...
<fieldN>valueN</fieldN>
</record>
</dataset>
<dataset>
<record>
<field1>value1</field1>
...
<fieldN>valueN</fieldN>
</record>
</dataset>
</data>
मैं की तरह लग रही एक बाहरी एक्सएमएल फ़ाइल करना चाहते हैं:
<xsl:variable name="config" select="document('./configuration.xml')"/>
<xsl:for-each select="data/dataset/record">
<!-- Store the current record in a variable -->
<xsl:variable name="rec" select="."/>
<xsl:for-each select="$config/configuration/outputField">
<xsl:variable name="field" select="fieldName"/>
<xsl:variable name="padding" select="fieldPadding"/>
<!-- Here's trouble -->
<xsl:variable name="value" select="$rec/$field"/>
<xsl:call-template name="append-pad">
<xsl:with-param name="padChar" select="$padChar"/>
<xsl:with-param name="padVar" select="$value"/>
<xsl:with-param name="length" select="$padding"/>
</xsl:call-template>
</xsl:for-each>
<xsl:value-of select="$newline"/>
</xsl:for-each>
मैं काफी XSL के लिए नया हूँ, इसलिए यह अच्छी तरह से एक हास्यास्पद सवाल हो सकता है, और दृष्टिकोण भी सादा wro हो सकता है एनजी (यानी एक कार्य के लिए आंतरिक लूप दोहराएं जो भिखारी पर एक बार किया जा सकता है)। मैं बाहरी लूप तत्व से फ़ील्ड मान का चयन करने के तरीके के बारे में किसी भी सुझाव की सराहना करता हूं और, ज़ाहिर है, इस कार्य को पूरा करने के बेहतर तरीके से खोलें।