추가 처리를 위해 WSDL 정의를 다른 형식으로 변환하려고하는데 문제가 발생했습니다. QName 값을 함수에서 반환 할 수 없습니다. 문자열로 변환하지 않아도됩니다.사용자 정의 함수에서 QNames 반환
오류 동작을 유지하면서 파일을 다음과 같이 축소했습니다. 원래 함수는 target-namespace
속성을 사용하는 접두사가없는 값을 <xs:schema>
또는 에서 변환해야했습니다.
예 XSLT 문서 :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://www.example.com/xslt"
exclude-result-prefixes="#all" version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:function name="my:resolve-QName2" as="xs:QName">
<xsl:param name="name" as="xs:string"/>
<xsl:param name="element" as="element()"/>
<xsl:value-of select="resolve-QName($name,$element)"/>
</xsl:function>
<xsl:template match="/definitions">
<xsl:variable name="qname" select="my:resolve-QName2('xs:string',.)" as="xs:QName"/>
<QName>
<prefix><xsl:value-of select="prefix-from-QName($qname)"/></prefix>
<local><xsl:value-of select="local-name-from-QName($qname)"/></local>
<namespace><xsl:value-of select="namespace-uri-from-QName($qname)"/></namespace>
</QName>
</xsl:template>
</xsl:stylesheet>
입력 파일 :
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:xs="http://www.w3.org/2001/XMLSchema"/>
예상 결과 :
<?xml version="1.0" encoding="UTF-8"?>
<QName>
<prefix>xs</prefix>
<local>string</local>
<namespace>http://www.w3.org/2001/XMLSchema</namespace>
</QName>
R unning 위의 코드, 작센 9.3.0.5 XSLT 프로세서는 오류와 함께 중지됩니다 :
Required item type of result of function my:resolve-QName2() is xs:QName. Cannot convert string to type {xs:QName}
엔진이 먼저 문자열로의 QName를 캐스팅하고 실패의 QName에 다시 캐스팅하려고하는 것 같다 . 나는 두 as="xs:QName"
을 제거하면, 나는 다음과 같은 오류가 발생합니다 :
Required item type of first argument of prefix-from-QName() is xs:QName. Cannot convert string to type {xs:QName}
어떻게 함수에서의 QName을 반환 할 수 있습니다?
Saxon XSLT 프로세서의 버그입니까, 아니면 XSLT에 대해 오해 한 부분입니까?
위의 파일을 처리 할 수있는 XSLT 엔진이 있습니까?
확인. 함수와 함께 항상 대신' '를 사용하십시오. 조금 카운터 직관적이지만 작동합니다. –
@MizardX : 기능뿐만 아니라. 원자화/문자열 변환을 원한다면, 그리고/또는'separator' 속성을 사용하기를 원한다면 –
을 사용하십시오. XSLT 2.0에서 데이터 모델 변경 사항을 도입했을 때 우리는 ((xsl : sequence, xsl : value-of)에 대한 지시 사항에 대해서는 xsl : value-of, xsl : text를 사용하지만 역 호환성 문제는 너무 심각합니다. 그래서, 네,이 두 가지 지시가 그들의 이름이 제안하는 것을 꽤하지 않음을 기억하십시오. –