나는 귀하의 질문을 이해한다고 생각합니다; 문자열의 각 "검색 유형"에 대해 키 - 값 쌍을 얻으려고합니다. 따라서 "colorSearch"= "blue", "jobSearch"= "12345"및 "nameSearch"= "Joe"입니다. 옳은?
XSLT의 버전을 지정하지 않았으므로 여기에 2 가지 방법이 나와 있습니다. 하나는 나중에 쿼리 할 수있는 XML을 만드는 것입니다. 다른 하나는 map
을 작성하는 것입니다. 첫 번째 방법은 XSLT 2.0 및 3.0에서 작동합니다. 두 번째 방법은 XSLT 3.0에서만 작동합니다. (I 테스트를 위해 색슨-PE를 사용했다.)
XML 입력
<example>jobSearch=12345;nameSearch=Joe;colorSearch=Blue</example>
XSLT (쇼 키 - 값 쌍을 만든 다음을 참조하십시오.)
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
exclude-result-prefixes="xs map">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="possible-types" select="('jobSearch','nameSearch',
'colorSearch')"/>
<!--METHOD 1-->
<!--XSLT 2.0-->
<xsl:variable name="searchTypes">
<xsl:for-each select="tokenize(.,';')">
<xsl:element name="{tokenize(.,'=')[1]}">
<xsl:value-of select="tokenize(.,'=')[2]"/>
</xsl:element>
</xsl:for-each>
</xsl:variable>
<!--METHOD 2-->
<!--XSLT 3.0-->
<xsl:variable name="type-map" as="map(xs:string, xs:string)"
select="map:new(
for $type in tokenize(/*,';')
return
map{tokenize($type,'=')[1] := tokenize($type,'=')[2]}
)"/>
<xsl:template match="/">
<results>
<xsl:for-each select="$possible-types">
<search-type name="{.}"
method1value="{$searchTypes/*[name()=current()]}"
method2value="{$type-map(current())}"/>
</xsl:for-each>
</results>
</xsl:template>
</xsl:stylesheet>
출력
<results>
<search-type name="jobSearch" method1value="12345" method2value="12345"/>
<search-type name="nameSearch" method1value="Joe" method2value="Joe"/>
<search-type name="colorSearch" method1value="Blue" method2value="Blue"/>
</results>
XSLT에서는 불가능한 일이므로 잘못된 방향으로 가고 있을지도 모릅니다. 당신이 달성하고자하는 것에 대해 좀 더 자세하게 설명한다면 (단지 '방법'이라기보다는) 대체 접근법을 제안 할 수 있습니다. 고맙습니다! –
"xsl에서 검색 유형 *에 따라 나중에이 변수를 호출 할 때"무엇을 의미하는지 명확히 할 수 있습니까? - 또한 사용중인 XSLT 버전을 알려주십시오. –
"나중에 키 - 값 쌍을 찾기 위해 용어에 액세스한다는 측면에서 * *"아무 의미도 없습니다. 이미 * 키 - 값 쌍의 배열이 있습니다. 유일한 문제는 현재 형태로 배열에 액세스하는 것이 편리하지 않다는 것입니다. 따라서 어레이를보다 유용하게 사용할 수있는 것으로 바꾸거나, 그대로두고 원하는 곳에서 필요할 때 추출하는 방법을 보려고 노력하는 것이 더 효율적입니다. –