2008-11-07 13 views
10

नहीं मिल रहा है। मैं .NET XslCompiledTransform का उपयोग करके कुछ Xaml को HTML में परिवर्तित करने की कोशिश कर रहा हूं और Xslt को Xaml टैग से मिलान करने में कठिनाइयों में भाग रहा हूं।xsl: टेम्पलेट मैच को

<FlowDocument PagePadding="5,0,5,0" AllowDrop="True" NumberSubstitution.CultureSource="User" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
    <Paragraph>a</Paragraph> 
</FlowDocument> 

और यह xslt: इस Xaml इनपुट के साथ उदाहरण के लिए

<html> 
    <body> 
    a 
</body> 
</html> 
उम्मीद से

बल्कि:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 

    <xsl:output method="html" indent="yes"/> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <xsl:apply-templates /> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="FlowDocument"> 
    <xsl:apply-templates /> 
    </xsl:template> 

    <xsl:template match="Paragraph" > 
    <p> 
     <xsl:apply-templates /> 
    </p> 
    </xsl:template> 

मैं इस आउटपुट प्राप्त

<html> 
    <body> 
     <p>a</p> 
    </body> 
</html> 

सका यह नामस्थान के साथ एक समस्या हो सकती है? यह एक एक्सएसएल ट्रांसफॉर्म पर मेरा पहला प्रयास है, इसलिए मुझे नुकसान हुआ है।

उत्तर

20

हां, यह नामस्थान के साथ एक समस्या है। आपके इनपुट दस्तावेज़ में सभी तत्व नामस्थान http://schemas.microsoft.com/winfx/2006/xaml/presentation में हैं। आपका टेम्पलेट डिफ़ॉल्ट नामस्थान में मौजूद तत्वों से मिलान करने का प्रयास कर रहा है, और यह कोई भी नहीं ढूंढ रहा है।

आपको अपने ट्रांसफॉर्म में इस नेमस्पेस को घोषित करने की आवश्यकता है, इसे उपसर्ग निर्दिष्ट करें, और तब उस उपसर्ग का उपयोग उस नामस्थान में तत्वों से मेल खाने के लिए किए गए किसी भी पैटर्न में करें। तो अपने XSLT कुछ इस तरह दिखना चाहिए:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:p="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    exclude-result-prefixes="msxsl"/> 

<xsl:output method="html" indent="yes"/> 

<xsl:template match="/"> 
    <html> 
    <body> 
     <xsl:apply-templates /> 
    </body> 
    </html> 
</xsl:template> 

<xsl:template match="p:FlowDocument"> 
    <xsl:apply-templates /> 
</xsl:template> 

<xsl:template match="p:Paragraph" > 
    <p> 
    <xsl:apply-templates /> 
    </p> 
</xsl:template> 
+0

धन्यवाद रॉबर्ट - मैंने xsl में नेमस्पेस जोड़ने का प्रयास किया था: स्टाइलशीट टैग लेकिन नाम फ़ील्ड को नाम फ़ील्ड में प्रीपेड नहीं किया था। – dmo

0

यह काम करता है जब मैं अपने स्रोत दस्तावेज़ से निकाल देने पर:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

मैं नहीं मानता कि अपने पिछले दो टेम्पलेट्स सभी मेल खाते रहे हैं। (आप एक अपने FlowDocument टेम्पलेट में <div> लपेटकर की तरह कुछ डाल कर परीक्षण कर सकते हैं।)

+0

फ़्लो डॉक्यूमेंट सीधे एक डब्ल्यूपीएफ रिचटेक्स्टबॉक्स से आता है, इसलिए मैं इसे स्रोत में हेरफेर करने के बजाय xslt में संभाल लेगा। नामस्थान जोड़ना और तत्व मिलान फ़ील्ड को अर्हता प्राप्त करने से समस्या ठीक हो गई। – dmo

0

बस बदलते

कोशिश: के साथ अपने XSL फ़ाइल में "XSL टेम्पलेट मैच = '/' '

टैग

"XSL: टेम्पलेट मैच = '*' '

यह आपको वांछित आउटपुट देना चाहिए।

संबंधित मुद्दे