XPathでは、接頭辞のない属性名は常に「名前空間なし」とみなされます。
したがって、type
属性は名前空間にありません。
だけを使用します。もちろん
<xsl:template match="*[@type = 'xsd:string']">
...
</xsl:template>
を、上記のマッチパターンだけでなくidentityID
要素に一致しますが、そのtype
属性のいずれかの要素の文字列値は'xsd:string'
です。
UPDATE:OPは、彼が実際にそのtype
属性XMLスキーマの名前空間で名前を指定する任意の要素と一致する必要があることを「コメントに認めて」います。ここで
は正しい解(OPのソリューションは、唯一の固定プレフィックスのために動作します)です:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match=
"*[namespace::*
[name() = substring-before(../@type, ':')
and
. = 'http://www.w3.org/2001/XMLSchema'
]
]">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
この変換はtype
属性の値XMLスキーマの名前空間の名前である任意の要素が一致する - 接頭辞に関係なく、!次のXML文書に、例えば、印加
:
<t xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<enitityID maxOccurs="0" minOccurs="0" type="xsd:string"/>
<somethingElse/>
<intIdID maxOccurs="0" minOccurs="0" type="xs:integer"/>
</t>
正しい結果(すべてのそのようなマッチした要素が出力にコピー)が製造される:
<enitityID xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
maxOccurs="0" minOccurs="0" type="xsd:string"/>
<intIdID xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
maxOccurs="0" minOccurs="0" type="xs:integer"/>
xsd:string以外の他のxsdタイプと一致する必要があります – bretter
答えは です。
bretter
Heh、私はそれを編集しようとしていました:) – Flynn1179