से कई फ़ाइलों को ट्रांसफॉर्म करें मैंने एक एक्सएसएलटी फ़ाइल बनाई है जो एक एक्सएमएल फ़ाइल को बदल सकती है। हालांकि, मेरे पास एकाधिक एक्सएमएल फाइलों के साथ कई सौ निर्देशिकाएं हैं। इन सभी फ़ाइलों को बदलने के लिए एक्सएसएलटी में कोई तरीका है। मैं सभी फाइलों की सूची प्राप्त करने के लिए संग्रह फ़ंक्शन का उपयोग कर रहा हूं। लेकिन, सुनिश्चित नहीं है कि अब ट्रांसफॉर्म को कैसे लागू करें।एक्सएसएलटी उपनिर्देशिका
मेरा उदाहरण एक्सएसएलटी फ़ाइल है। असल में, मैं सभी एक्सएमएल फाइलों के माध्यम से लूप करना चाहता हूं और व्यक्तिगत फ़ाइल पर टेम्पलेट टेबल लागू करना चाहता हूं। इन सभी परिवर्तनों का उत्पादन एक एकल फ्लैट टेक्स्ट फ़ाइल में होना चाहिए।
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:foo="http://whatever">
<xsl:output method="text" encoding="ISO-8859-1"/>
<xsl:template name="process">
<xsl:variable name="files" select="collection('file:///C:/files/testResults?select=*.xml;recurse=yes')"/>
<xsl:for-each select="$files">
<xsl:if test="(not(contains(document-uri(.), 'SuiteSetUp'))) and (not(contains(document-uri(.), 'SuiteTearDown')))">
<xsl:value-of select="tokenize(document-uri(.), '/')[last()]"></xsl:value-of>
<xsl:apply-templates select="/testResults/result/tables/table[14]">
<xsl:with-param name="title" select="/testResults/rootPath"></xsl:with-param>
</xsl:apply-templates>
<xsl:apply-templates select="/testResults/result/tables/table[15]"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="table">
<xsl:param name="testName"></xsl:param>
<xsl:for-each select="row">
<xsl:if test="position() > 2">
<xsl:variable name="choices" select="col[2]"></xsl:variable>
<xsl:if test="contains($choices, 'fail')">
<xsl:value-of select="$testName"></xsl:value-of>
<xsl:text>|</xsl:text>
<xsl:value-of select="col[1]"></xsl:value-of>
<xsl:text>|</xsl:text>
<xsl:value-of select="foo:getCorrectChoices(col[2])"></xsl:value-of>
<xsl:text>|</xsl:text>
<xsl:value-of select="foo:getExpectedChoices(col[2])"></xsl:value-of>
<xsl:text>|</xsl:text>
<xsl:call-template name="NewLine"/>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="NewLine">
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:function name="foo:getCorrectChoices">
<xsl:param name="content"></xsl:param>
<xsl:analyze-string select="$content" regex="\[(\[.+?\])\] fail">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"></xsl:value-of>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:function>
<xsl:function name="foo:getExpectedChoices">
<xsl:param name="content"></xsl:param>
<xsl:analyze-string select="$content" regex="fail\(expected \[(\[.+?\])\]">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"></xsl:value-of>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:function>
</xsl:stylesheet>
आप किस प्रकार का एक्सएसएलटी प्रोसेसर उपयोग कर रहे हैं? यदि आप सैक्सन का उपयोग कर रहे हैं, तो आप इसे सीधे कमांड लाइन से कर सकते हैं। सैक्सन उन फ़ाइलों के बैच को बदलने में सक्षम है जिसके लिए आप एक ही ट्रांसफॉर्म लागू करना चाहते हैं। –
मैं अपने एक्सएसएलटी बनाने के लिए एडिटएक्स नामक एक एक्सएसएलटी संपादक का उपयोग कर रहा था और सोचा कि शायद मैं इसे वहां से चला सकता हूं। लेकिन ऐसा लगता है कि मुझे इसे कहीं और चलाने की ज़रूरत है। मैंने एक्सएसएलटी के लिए एक चींटी कार्य देखा। क्या वह काम करेगा? – user320587
आप किस ऑपरेटिंग सिस्टम पर चल रहे हैं? –