2013-04-02 45 views

回答

2

沒有,屬性聲明不能兼得#FIXED#REQUIRED

如果屬性爲#FIXED,則該值始終在聲明中指定,即使該屬性物理上不在XML中。

例如,在下面的XML的test屬性的值是bar即使屬性是不實際的XML本身規定:

<!DOCTYPE foo [ 
<!ELEMENT foo EMPTY> 
<!ATTLIST foo 
      test CDATA #FIXED 'bar'> 
]> 
<foo/> 

這裏是通過XSLT證明變換:

XSLT 2.0(它是有效的1.0太)

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="/foo"> 
     <results> 
      <xsl:value-of select="@test"/>   
     </results> 
    </xsl:template> 

</xsl:stylesheet> 

輸出

<results>bar</results> 
+0

非常感謝!你的回答非常明確和有幫助。 – user2236014

3

丹尼爾海利是正確的,至少對於DTD中的語法。

如果你想要一個屬性的所有出現的地方有一個給定值,你想要求值是XML文檔(不存在由默認值機制)的實際存在,如果價值是一個法律NMTOKEN,那麼你可以通過不同的途徑達到你想要的行爲:

<!ATTLIST myTag 
    myAttribute (some-text) #REQUIRED > 

這裏的屬性類型信息(some-text)指定爲myAttribute唯一有效的值是some-text#REQUIRED關鍵字強加約束即myAttribute必須物理存在於輸入中。

如果您想要的值不是合法的NMTOKEN - 例如,如果它是絕對URI,或者其中包含空格或非名稱字符的短語 - 則此方法無效。

+0

非常感謝! – user2236014

+0

偉大的一點。我應該包括這個選項。 +1 –

相關問題