2010-06-08 9 views
5

हमारे पास एक विशेषता "शैली" के साथ एक एक्सएमएल नोड "आइटम" है, जो "हेडर 1" है। हालांकि यह शैली बदल सकती है। हमारे पास हेडर 1 नामक एक विशेषता सेट है जो परिभाषित करता है कि यह पीडीएफ में कैसे दिखना चाहिए, xsl के माध्यम से उत्पन्न: fo।मैं xsl: विशेषता और xsl कैसे जोड़ सकता हूं: उपयोग-विशेषता-सेट सशर्त रूप से एक विशेषता सेट का उपयोग करने के लिए?

यह काम करता है (उपयोग-विशेषता सेट इनलाइन उल्लेख किया गया है, के लिए में: तालिका सेल नोड):

लेकिन इस (XSL का उपयोग कर नहीं करता है: विशेषता है, क्योंकि विशेषता @style उदाहरण के लिए हेडर 2 भी हो सकता है)। यह कोई त्रुटि उत्पन्न नहीं करता है, पीडीएफ बनाया गया है, लेकिन गुण लागू नहीं हैं।

<xsl:template match="item[@type='label']"> 
    <fo:table-row> 
     <fo:table-cell>   
      <xsl:attribute name="xsl:use-attribute-sets"> 
       <xsl:value-of select="@style" /> 
      </xsl:attribute> 
      <fo:block> 
       <fo:inline font-size="8pt" > 
        <xsl:value-of select="." /> 
       </fo:inline> 
      </fo:block> 
     </fo:table-cell> 
    </fo:table-row> 
</xsl:template> 

क्या किसी को पता है क्यों? और हम इसे कैसे प्राप्त कर सकते हैं, अधिमानतः लंबे xsl के बिना: अगर या xsl: सामान कब?

उत्तर

5

http://www.w3.org/TR/xslt#attribute-sets

गुण सेट से निर्दिष्ट करने के द्वारा उपयोग किया जाता है एक उपयोग-विशेषता सेट XSL पर विशेषता: से विशेषता सेट तत्वों

: तत्व, XSL: प्रति [...] या XSL http://www.w3.org/TR/xslt#section-Creating-Elements-with-xsl:element

<!-- Category: instruction --> 
<xsl:element 
    name = { qname } 
    namespace = { uri-reference } 
    use-attribute-sets = qnames> 
    <!-- Content: template --> 
</xsl:element> 

और http://www.w3.org/TR/xslt#copying

<!-- Category: instruction --> 
<xsl:copy 
    use-attribute-sets = qnames> 
    <!-- Content: template --> 
</xsl:copy> 

तो, यह स्पष्ट है कि यह एक एवीटी (गतिशील रूप से परिभाषित) नहीं हो सकता है।

नोट: के बारे में शाब्दिक परिणाम तत्व, विनिर्देश कहते हैं: उपयोग-विशेषता सेट एक शाब्दिक परिणाम तत्व में यह विशेषता: गुण सेट भी एक XSL निर्दिष्ट करने के द्वारा इस्तेमाल किया जा सकता। एवीटी की अनुमति देने के बारे में यह दुर्लभ अस्पष्ट है। मान लीजिए

लगभग दूसरे उदाहरण: उस टेम्पलेट के साथ आप परिणाम पेड़ में "xsl: use-attribute-sets" विशेषता जोड़ रहे हैं। यह एक्सएसएलटी प्रोसेसर द्वारा इसका व्याख्या नहीं किया गया है।

फिर, समाधान क्या है? आपको "xsl: use-attribute-sets" से छुटकारा पाना होगा। "@ स्टाइल" के लिए टेम्पलेट नियम लागू करें और वांछित विशेषताओं को उत्पन्न करें।

0

का प्रयास करें:

<fo:table-cell xsl:use-attribute-sets="{@style}"> 
+0

नहीं, काम नहीं करेगा। हमें निम्न त्रुटि मिलती है: "'' 'वर्ण, हेक्साडेसिमल मान 0x7B, को किसी नाम में शामिल नहीं किया जा सकता है"। – Peter

0

एक चर का उपयोग करें style, true के लिए एक चर, false के लिए एक चर, और एक चर को परिभाषित करने के संदर्भ के लिए या तो एक गतिशील का उपयोग कर स्ट्रिंग संयोजन:

<xsl:variable name="style"> 
    <xsl:value-of select="concat(boolean(@style),boolean(not(@style)))"/> 
</xsl:variable> 

<xsl:variable name="falsetrue" select="'foo'"/> 
<xsl:variable name="truefalse" select="'bar'"/> 
<!--...--> 


<xsl:value-of select="//xsl:variable/@select[../@name='style']"/> 

या आप टेम्पलेट्स स्वयं से मेल खाते हैं और उन्हें "शैली" के मान का उपयोग करके कॉल कर सकते हैं:

<xsl:template name="Header1" match="xsl:template[@name='Header1']"/> 

<xsl:template name="Header2" match="xsl:template[@name='Header2']"/>