2016-05-08 163 views
1

我需要關於XSL和XML Schema的幫助。
這是XML文件:XML,XSL,XML Schema

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="spellstyle.xsl"?> 
<spells xmlns="spels.xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="spellsschema.xsd"> 
<spell category="fire" cooldown="18" manacost="100"> 
    <name>Fire Breath</name> 
    <image id="FireBreath"/> 
    <discription>Some text</discription> 
    <category>Fire</category> 
    <cooldown>18</cooldown> 
    <manacost>100</manacost> 
</spell> 
</spells> 

這是XML模式:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="spells.xml" elementFormDefault="qualified"> 
<xs:element name="spells"> 
<xs:complexType> 
    <xs:sequence> 
     <xs:element name="spell"> 
     <xs:attribute name="category" use="required"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:pattern value="fire|water|air|earth"/> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:attribute> 
     <xs:attribute name="cooldown" type="xs:duration" use="required"/> 
     <xs:attribute name="manacost" type="xs:decimal" use="required"/> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="name" type="xs:string"/> 
        <xs:element name="image"/> 
        <xs:element name="discription" type="xs:string"/> 
        <xs:element name="category" type="xs:string"/> 
        <xs:element name="cooldown" type="xs:duration"/> 
        <xs:element name="manacost" type="xs:decimal"/> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:schema> 

這是XSL:

<?xml version="1.0" encoding="utf-8"?> 
<!-- DWXMLSource="spells.xml" --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <xsl:for-each select="spells/spell"> 
    <xsl:value-of select="discription"/> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet>  

的事情是,當我APLY我的XSL文件,XML停止顯示在所有。我認爲我的XML Schema也無法正常工作。我的限制也被忽略。
我該怎麼辦?

+0

在xml中你有'xmlns =「spels.xml」',在xsd中你有'targetNamespace =「spells.xml」'。這是一個錯字嗎? –

+0

是的。沒關係。 – stroibot

回答

0

xsi:schemaLocation="spellsschema.xsd"是錯的,你需要把一對名稱空間uri和位置uri放在那裏:xsi:schemaLocation="spells.xml spellsschema.xsd"

+0

我不明白。我已經像你說過的那樣做了,但它仍然忽略了我的限制。我的意思是,當我刪除屬性''類別'''例如它仍然正常顯示,但''類別''是必需的屬性。或者當我更改屬性''「冷卻時間」('xs:duration'到''Hello World''')時,它仍然正常工作。 – stroibot

+0

好吧,您需要詳細解釋如何使用模式來驗證XML,也就是您使用哪種驗證解析器或編輯器,因爲基於模式的驗證根本不受許多XML解析器的支持,當然不是由那些例如,瀏覽器中使用的XML解析器。當然,名稱空間名稱中的拼寫錯誤很重要,只要XML實例和模式不具有相同的名稱空間URI,任何驗證解析器都無法檢查模式。因此,首先編輯您的問題並糾正問題,並告訴我們您使用哪種軟件進行驗證。 –