2009-12-07 13 views
5

Lütfen bana yardımcı olun çocuklar. Sadece basit bir sonuç ağacı parçası bildirmeye çalışıyorum ve üzerinde yineleyin. XSL msxsl: düğüm kümesi sorunu


...

<xsl:variable name="rtf"> 
    <item-list> 
    <item id="1">one</item> 
    <item id="2">two</item> 
    <item id="3">three</item> 
    <item id="4">four</item> 
    </item-list> 
</xsl:variable> 

<xsl:for-each select="msxsl:node-set($rtf)/item-list/item"> 
    <xsl:value-of select="@id"/> 
</xsl:for-each> 

...


Bunun nasıl çalıştığı hakkında tamamen yanlış mıyım?


Düzenleme: Ben .NET XslCompiledTransform kullanarak ve doğru msxsl ad beyanlarını ediyorum - xmlns: ": şemalar-microsoft-com: urn xslt" = msxsl

, dönüştürücü ince yürütür - Sorun şu ki, hiçbir şey çıkış yok

+0

sanmıyorum içinde hiçbir zaman yeterince kod olduğunu ve kendisi kapalı aslında çıkış şey ... Ben – Murph

+0

için Ne demek istediğinizden emin değilim ama bu tüm xslt dosyasının bir pasajıdır. Yukarıdaki ve altındaki her şey gayet iyi. Sadece beklendiği gibi davranmayan rtf ve düğüm kümesi. – Maleks

cevap

8

Benim şüphe Microsoft XSLT işlemci kullanarak varsayarak yaşıyorum size stil ilan varsayılan bir ad alanı olması. Bu, < öğe listesi> ve < öğe> öğelerini etkili bir şekilde bir ad alanına yerleştirir. XPath 1.0 kullanarak ad alanı bakımından nitelikli öğeleri seçmek için, her zaman ifadede bir önek kullanmalısınız. Eğer stil üstündeki böyle bir şey varsa

Yani:

<xsl:stylesheet xmlns="http://example.com" xmlns:x="http://example.com"...> 

Ve sonra "x" öneki kullanın:

<xsl:stylesheet xmlns="http://example.com"...> 

Sonra da bu eklemeniz gerekir XPath ifadenizde: Bu hile yaptıysa bana bildirin. Ben sadece burada spekülasyon yapıyorum. Msxsl aksine

+0

Genius. Bir muamele yapar. – Maleks

+0

Spekülasyonunuz haklı! – Safor

1

Bu bana uygun görünüyor.

Uzantı işlevleri için msxsl ad alanını doğru olarak bildirdiniz mi? Böyle bir şey:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 

Burada

+0

Yep, MS teknolojilerini kullanarak ve doğru ad alanına kayıtlı. – Maleks

4

, XslCompiledTransform o supposed to be olduğunu node-set() fonksiyonu sağlar - EXSLT Ortak ad:

<xsl:stylesheet xmlns:exslt="http://exslt.org/common"> 
    ... 
    <xsl:for-each select="exslt:node-set($rtf)/item-list/item"> 
    ... 
</xsl:stylesheet> 
+0

Başlıklar için teşekkürler. – Maleks

+0

@Pavel Minaev Çok teşekkürler! Xslt ve python kullanıyorum ve benim durumumda, harika bir çözümdü. – daikini