2012-02-29 16 views
0

xsd:namespaceにtype属性の要素の一致を指定するにはどうすればよいですか?たとえば:型の名前空間がxsd:stringの要素を一致させる方法

<enitityID maxOccurs="0" minOccurs="0" type="xsd:string"/> 

私は

<xsl:template match="*[namespace-uri(@type)= 'http://www.w3.org/2001/XMLSchema']"> 
... 
</xsl:template> 

を試みたが、動作するようには思えません。ありがとう。

答えて

0

その属性値のxsd:は名前空間宣言ではありません。それは属性の値の一部です。それに合わせて@type = 'xsd:string'が必要です。

EDIT:type属性は、型xsとスキーマで宣言されている場合は、コメントを1として、xsd:始まる何かを一致させるために、あなただけの、スキーマ対応のXSLT 2.0変換でsubstring-before(@type,':') = 'xsd'またはsubstring(@type,1,4) = 'xsd:'

+0

xsd:string以外の他のxsdタイプと一致する必要があります – bretter

+1

答えは です。 bretter

+0

Heh、私はそれを編集しようとしていました:) – Flynn1179

0

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"/> 
+0

私はxsd以外の他のxsdタイプと一致する必要があります:文字列 – bretter

+0

@bretter:あなたが質問で必要なものを言うことを学ぶ! –

+0

@bretter:あなたの本当の問題に対する正しい解決策については、私のアップデートを見てください。 –

1

を使用することができます。QNameのあなたがしたいです*[namespace-uri-from-QName(@type) = 'http://www.w3.org/2001/XMLSchema']

関連する問題