2011-05-06 5 views
0

나는 XSLT를 배우고 있으며, 현재 막혀있어 해결책을 찾을 수 없다. 이 일을 도와 주시면 정말 고맙겠습니다.XSLT 문제 : 문자열에서 """또는 "& # x003E;"하위 문자열을 검색하십시오.

<img src="Afbeeldingen_Hotpot/beer.jpg" alt="afbeelding van een beer" title="beer" width="170" height="144" style="display:block; margin-left:auto; margin-right:auto; text-align:center;" style="float:center;" /> 

내 목표는이 예를 들어 "144"에서 ... 이미지의 높이를 필터링하는 것입니다 : 당신 밑에서 은 예에게 $ 문자열의

값을 찾을 수 있습니다. functx :이 웹 사이트에서 가져온 인덱스의 문자열 : http://www.xsltfunctions.com/xsl/functx_index-of-string.html

이 지금 사용하는 XSLT 코드 : 내가 사용하고자하는 XSLT 코드 아래에는

<xsl:variable name="positionHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($string,'height=') + 8"/></xsl:variable> 
    <xsl:variable name="partStringHeight" as="xs:string"><xsl:value-of select="substring($string,$positionHeight)"/></xsl:variable> 
    <xsl:variable name="lengthHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($partStringHeight,'style=' - 3)"/></xsl:variable> 
    <xsl:variable name="height" as="xs:string"><xsl:sequence select="substring($partStringHeight,1,$lengthHeight)"/></xsl:variable> 

하지만,이 때문에 오류를 제공 .

: 인덱스의 문자열 """는 "제로에 대한
<xsl:variable name="positionHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($string,'height=') + 8"/></xsl:variable> 
    <xsl:variable name="partStringHeight" as="xs:string"><xsl:value-of select="substring($string,$positionHeight)"/></xsl:variable> 
    <xsl:variable name="lengthHeight" as="xs:integer"><xsl:value-of select="functx:index-of-string($partStringHeight,'&quot;' - 1)"/></xsl:variable> 
    <xsl:variable name="height" as="xs:string"><xsl:sequence select="substring($partStringHeight,1,$lengthHeight)"/></xsl:variable> 

는 같은 문자열의 인덱스를 얻을 수있는 방법이 있나요

나는 나는 "스타일 ="발생하지 않는 높이지만 ..

답변

2

XSLT에서 일반적인 솔루션은 변수의 값으로 불편 문자열을 넣어하는 것입니다 (select를 사용하지를 많은 문자열이 필요했다했기 때문에) : 당신은 insid - 3 또는 - 1을 넣어 한 다음

<xsl:variable name="lengthHeight" as="xs:integer" 
    select="functx:index-of-string($partStringHeight,$quot) - 1" /> 
또한

통지

<xsl:variable name="quot">"</xsl:variable> 

eindex-of-string() 괄호 확실히 의 반환 값에서 3 또는 1을 뺍니다. index-of-string()? "에서 3 또는 1을 빼는 것은 실제로 의미가 없으므로

또한 가변 정의 본문 내에 <xsl:value-of />을 사용하면 대개 중복됩니다. 나는 그것을 제거했다.

마지막으로, 당신은 더 적은 번거 로움과 함께 당신이 원하는 것을 얻을 substring-before()substring-after()를 사용할 수 있습니다

사실
<xsl:variable name="beforeHeight" as="xs:integer">height="</xsl:variable> 
<xsl:variable name="afterHeight" as="xs:string">" style=</xsl:variable> 
<xsl:variable name="height" as="xs:string" 
    select="substring-before(substring-after($string, $beforeHeight), $afterHeight)" /> 

난 당신이 상단에 보여 주었다 입력 문자열 값이 이전 여부를 질문에서 확실하지 않다거나 XML 구문 분석 후. 이 구문 분석 후라면, 문자열 데이터 자체는 다음 &quot;에 넣어 &quot;보다는 " 포함 즉, 그러나 당신은 &&amp;으로 탈출해야합니다 당신의 문자열에 당신이하지 않았을

<xsl:variable name="beforeHeight" as="xs:integer">height=&amp;quot;</xsl:variable> 
<xsl:variable name="afterHeight" as="xs:string">&amp;quot; style=</xsl:variable> 

이 경우 인용 부호를 , 당신은 그런 변수에 값을 넣을 필요가 없다. 하지만 가독성을 위해서는 아마도 좋은 아이디어 일 것입니다.

마찬가지로 &amp;#x003e&amp;amp;#x003e으로 이스케이프해야합니다.

+0

명확한 설명을 해 주셔서 감사합니다. 그 문자열은 변형 전입니다 ... 나쁜 지금 나는 가야 만합니다, 그러나 나는 내일 그것을 체크 아웃 할 것입니다! – user737917

+0

+1 정답입니다. –

+1

도움을 주셔서 감사합니다! 이제는 작동 중이고 하위 문자열을 사용하십시오. 전후로 어느 것이 더 낫습니다! :) – user737917

관련 문제