/ / XSLT xsl: प्रतिलिपि और xsl: प्रत्येक के लिए विशेषताएँ - जावा, xslt, विशेषताएँ, विवरण, प्रतिलिपि

एक्सएसएलटी xsl: प्रतिलिपि और xsl: गुणों पर प्रत्येक के लिए - जावा, xslt, विशेषताओं, foreach, प्रति

मेरे पास निम्नलिखित xsl टेम्पलेट है:

<xsl:template match="@*|node()" mode="fix-entity-references">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:if test="name() = "href"">
<xsl:variable name="hrefvar">
<xsl:value-of select="current()"/>
</xsl:variable>
<xsl:attribute name="href">
anything
</xsl:attribute>
</xsl:if>
</xsl:for-each>
<xsl:apply-templates select="@*|node()" mode="fix-entity-references"/>
</xsl:copy>
</xsl:template>

मैं वर्तमान की प्रतिलिपि बनाने के लिए इस टेम्पलेट का उपयोग करना चाहता हूंनोड, लेकिन इसके सभी गुणों को संसाधित करने के बाद ही। वर्तमान नमूना बहुत सरल है और एक बहुत ही सरल ब्लॉक के साथ प्रतिस्थापित किया जा सकता है। परीक्षण अभिव्यक्ति बहुत अधिक जटिल होगी बिंदु यह है कि प्रत्येक तत्व पर एन विशेषताएँ हो सकती हैं। अभिव्यक्ति को संतुष्ट करें। यही कारण है कि प्रत्येक प्रत्येक के लिए उपयोगी है। मैं इन सभी विशेषताओं को उसी तरह संसाधित करना चाहता हूं। मैंने "वर्तमान ()" मान को प्रिंट करने का प्रयास किया, यह हमेशा ठीक काम करता है। समस्या विशेषता को अद्यतन करने के साथ है। मूल नोड। "href" विशेषता का मान "कुछ भी" करने से काम नहीं चलेगा, क्योंकि मुझे लगता है कि जब तक मैं इसे कॉल करता हूं, यह प्रत्येक ब्लॉक के अंदर होता है जिसका मतलब है कि वर्तमान नोड ही विशेषता है।

मुझे प्रत्येक ब्लॉक के लिए अंदर से मूल ब्लॉक की विशेषता कैसे सेट करनी चाहिए, ताकि कॉपी किए गए नोड संशोधित विशेषताओं का उपयोग करें?

पहले ही, आपका बहुत धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 1

बजाय for-each तथा if, आप उन टेम्पलेट्स का उपयोग करने पर विचार कर सकते हैं जो उन विशेषताओं से मेल खाते हैं जिन्हें आप अलग तरह से व्यवहार करना चाहते हैं, उदा।

<xsl:template match="@*|node()" mode="fix-entity-references">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="fix-entity-references"/>
</xsl:copy>
</xsl:template>

<xsl:template match="@href | @foo | @bar" mode="fix-entity-references">
<xsl:attribute name="{name()}">
<xsl:value-of select=".."/>
</xsl:attribute>
</xsl:template>

XPath डेटा मॉडल में विशेषता नोड्स को तत्व के बच्चे नहीं माना जाता है, लेकिन एक विशेषता नोड के माता-पिता है वह तत्व जो विशेषता का है (यानी जब संदर्भ नोड एक विशेषता है, .. वह तत्व है जिस पर विशेषता पाई जा सकती है)। इस प्रकार यह नमूना किसी के मूल्य को बदल देगा href, foo या bar विशेषता वाले तत्व की पाठ सामग्री के साथ विशेषता, अर्थात्।

<a href="#">http://example.com</a>

बन जाएगा

<a href="http://example.com">http://example.com</a>