使用:
/*/Abstract
[substring-after(@xsi:type, ':') = 'XYZImpl']
[namespace::*
[name() = substring-before(../@xsi:type, ':')
and
. = 'http://www.namspace.org/impl'
]
]
Abstract
これにより、属性に含まれる QName 値のプレフィックスでもあるプレフィックス付きの名前空間を持つ XML ドキュメントの最上位要素の子が選択されxsi:type
ます。また、属性に含まれる QName 値の「local-name」部分は、xsi:type
まさに string"XYZImpl"
です。
XSLT ベースの検証:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="some:xsi">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*/Abstract
[substring-after(@xsi:type, ':') = 'XYZImpl']
[namespace::*
[name() = substring-before(../@xsi:type, ':')
and
. = 'http://www.namspace.org/impl'
]
]
"/>
</xsl:template>
</xsl:stylesheet>
この変換が次の XML ドキュメントに適用されると(提供によって生成され、整形式になります):
<t xmlns:xsi="some:xsi">
<Abstract xmlns:q3="http://www.namspace.org/impl"
xsi:type="q3:XYZImpl">
</Abstract>
<Abstract xmlns:q8="http://www.namspace.org/another"
xsi:type="q8:XYZImpl">
</Abstract>
</t>
必要な正しい要素が選択され、出力にコピーされます。
<Abstract xmlns:q3="http://www.namspace.org/impl" xmlns:xsi="some:xsi" xsi:type="q3:XYZImpl"/>
注: XPath 式が正常に評価されるためには、プレフィックス付きの適切な名前空間がxsi
XPath 実装に登録されている必要があります。