2012-03-31 204 views
0

我遇到困難引用的所有3 我已經寫了我的XML,XSD和XSL,但它似乎並沒有與參考工作。 以下是使用相同參考的簡單示例。XML XSL XSD驗證:

XSD:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.w3schools.com" 
    xmlns="http://www.w3schools.com" 
    elementFormDefault="qualified"> 

    <xs:element name="email"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="to" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

XML:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="email.xsl"?> 

<email 
    xmlns="http://www.w3schools.com" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.w3schools.com email.xsd"> 

    <to>John</to> 
</email> 

XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <xsl:for-each select="email"> 
      <h2>To</h2> 
      <td><xsl:value-of select="John"/></td> 
     </xsl:for-each> 
     </body> 
    </html> 
    </xsl:template> 

</xsl:stylesheet> 
+0

那麼問題是什麼?我沒看到一個。問題是什麼?沒有什麼被描述爲有問題的。 – 2012-03-31 15:15:47

回答

3

的XSLT不工作,因爲你的email元素有一個命名空間,並與元素相匹配一個使用XPath的命名空間,你總是必須明確聲明一個前綴並使用它。

你需要寫這樣的XSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ws="http://www.w3schools.com" 
    version="1.0"> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <xsl:for-each select="ws:email"> 
      <h2>To</h2> 
      <td><xsl:value-of select="ws:to"/></td> 
     </xsl:for-each> 
     </body> 
    </html> 

    </xsl:template> 

我不知道你是從XSD期待什麼:它似乎是正確的,但它不會以任何方式影響應用XSLT。

email是XML中的根元素,因此每個XML文件只能有一個email元素 - 可能您應該在它之上有不同的根元素。

還請注意,您正在生成HTML可疑:一<td>這不是一個表內。

+0

現在它的作品謝謝你! – John 2012-04-01 09:45:44