在XPath中,前綴不確定的屬性名稱始終被認爲是在「no namespace」中。
因此,type
屬性沒有名稱空間。
只需使用:
<xsl:template match="*[@type = 'xsd:string']">
...
</xsl:template>
當然,上述匹配模式不僅identityID
元件,但匹配任何元素的字符串值,其type
屬性是'xsd:string'
。
UPDATE:該OP已「承認了註釋」,他居然需要其type
屬性指定在XML Schema命名空間的名稱的任何元素匹配。
這是一個正確的解決方案(業務方案的解決方案僅適用於一個固定的前綴):
<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類型之外的xsd:字符串 – bretter 2012-02-29 15:23:51
答案是 的 您的評論讓我看着辦吧出。 –
bretter
2012-02-29 15:29:42
嘿,我正要編輯:) – Flynn1179 2012-02-29 16:03:28