2015-01-28 2 views
0

나는 아래의 2 가지 XML 경우가 있습니다. 사례 1거기에 노드 사이에 텍스트가 있는지 확인하는 방법입니다

<para><content-style font-style="bold">1/3</content-style> This is text</para> 

Case2

<para>This is text <content-style font-style="bold">1/3</content-style></para> 

난이 경기 당

<xsl:template match="para[content-style[matches(., '(\w+)/(\w+)')]]"> 

아래와 같이하지만 같은 템플릿 일치를 사용하고, 두 사건이 언급

위는 만족하다 나는 두 번째 사건을 무시하고 첫 번째 사건만을 잡기를 원한다.

내가 어떻게 이런 일을 할 수 있는지 알려 주시기 바랍니다.

감사

+0

그리고 정확히 규칙을 만드는 차이를 _is_ 무엇? 텍스트가 공백 문자로 시작하거나 끝나거나 텍스트 노드가 자식'content-style' 요소 앞이나 뒤에 있는지? –

+0

안녕하세요 @ MathiasMüller, 텍스트 노드는 자식이 규칙을 만들기 전후입니다. – user3872094

답변

2

matches()를 사용할 필요가 없습니다.

XML 입력

<root> 
    <para><content-style font-style="bold">1/3</content-style>YES</para> 
    <para>NO <content-style font-style="bold">1/3</content-style></para> 
</root> 
: 규칙은 content-style 요소가 두 가지 경우가 존재하는 다음의 입력 문서를 가정

para[node()[position() = 1 and self::content-style]] 

에 대한 para, 경기의 첫 번째 자식 노드가 있는지 경우

XSLT 스타일 시트

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="para[node()[position() = 1 and self::content-style]]"> 
     <xsl:copy-of select="."/> 
    </xsl:template> 

    <xsl:template match="text()"/> 

</xsl:stylesheet> 

XML 출력

<?xml version="1.0" encoding="UTF-8"?> 
<para> 
    <content-style font-style="bold">1/3</content-style>YES</para> 
관련 문제