2009-12-07 3 views
5

제발 도와주세요. 난 그냥 간단한 결과 트리 조각을 선언하고 그것을 반복하려고합니다. XSL msxsl : 노드 설정 문제


...

<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> 

...


나는 이것이 어떻게 작동하는지에 대해 완전히 잘못된 건가요?


편집 : 나는 .NET XslCompiledTransform를 사용하고 올바른 msxsl 네임 스페이스 선언이 있어요 - XMLNS : ": 스키마 - 마이크로 소프트 닷컴 : 항아리 XSLT"= msxsl

transformating 잘 실행을 - 문제는 아무것도 출력되지 않는다는 것입니다.

+0

나는 생각하지 않는다을에서 그게 충분히 코드 그 자체 오프 실제로 출력 아무것도 ... 나는 ' – Murph

+0

에 정말 당신이 무슨 뜻인지 모르겠지만 이것은 전체 xslt 파일의 발췌 문장입니다. 위와 아래 모두 잘 출력됩니다. 예상대로 작동하지 않는 rtf 및 노드 집합 일뿐입니다. – Maleks

답변

8

내 의심은 Microsoft XSLT 프로세서를 사용하는 가정하고 당신이 당신의 스타일 시트에 선언 된 기본 네임 스페이스를 가지고있다. 즉, < item-list> 및 < item> 요소를 네임 스페이스에 효과적으로 배치 할 수 있습니다. XPath 1.0을 사용하여 네임 스페이스 한정 요소를 선택하려면 항상 표현식에 접두어를 사용해야합니다. 당신이 당신의 스타일 시트의 상단에 이런 일이있을 경우

그래서 :

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

을 그리고있는 "X"접두사를 사용

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

은 그럼 당신은이를 추가해야합니다 XPath 표현식에서 :

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

트릭을 수행했는지 알려주세요. 나는 여기서 추측하고있다. MSXSL 달리

+0

Genius. 치료를해라. – Maleks

+0

추측이 맞습니다! – Safor

1

이것은 나에게 좋을 것 같습니다.

확장 기능에 대한 msxsl 네임 스페이스를 올바르게 선언 했습니까? 이런 식으로 뭔가 :

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

난 당신이 여기

+0

예, MS 기술을 사용하고 올바른 네임 스페이스를 등록하십시오. – Maleks

4

, XslCompiledTransformsupposed to be입니다 node-set() 기능 제공 - EXSLT 공통 네임 스페이스 :

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

머리를 주셔서 감사합니다. – Maleks

+0

@Pavel Minaev 정말 고마워! 저는 xslt와 python을 사용하고 제 경우에는 훌륭한 해결책이었습니다. – daikini