사용 :
//*[starts-with(@id, 'username_')
and
floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_')
]
설명는 :
이 표현은 그 id
속성 문자열 값 문자열로 시작하는 요소를 선택이고이 문자열의 나머지 (시작 후 "username_"
이후)는 정수입니다. 이 변환 인 경우
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select=
"//*[starts-with(@id, 'username_')
and
floor(substring-after(@id, 'username_')) = substring-after(@id, 'username_')
]
"/>
</xsl:template>
</xsl:stylesheet>
: 기반 검증 -
floor($string) = $string
XSLT : 및 경우에만 $string
정수를 나타내는 경우 여기
우리는 다음과 같은 표현식이 참 사실을 사용 이 XML 문서에 적용됨 :
<t>
<user id="username_Xyz"/>
<user id="username_Xyz123"/>
<user id="username_123Xyz"/>
<user id="username_123Xyz456"/>
<user id="username_2015"/>
</t>
XPath 식을 평가하고,이 평가에서 선택된 노드는 출력에 복사됩니다 :
<user id="username_2015"/>
이주의 마십시오 :이 질문에 대한 다른 두 답변의 모든 5 개 user
요소를 선택할 것 위의 문서 - 물론 잘못된 것입니다.
+1, 흥미로운 방법. 나는 그것이 그가 요구하는 복잡성 수준에 달려 있다고 생각한다. – Arran
@Arran, 여러분은 환영합니다. 이 대답의 XPath 식은 모든 복잡성 수준의 XML 문서에서 올바르게 작동합니다.'$ string'이 정수의 문자열 표현 인 경우'floor ($ string) = $ string' 표현식은'true()'입니다. –