Проверка XML XSL XSD: - PullRequest
       0

Проверка XML XSL XSD:

0 голосов
/ 31 марта 2012

У меня трудности со ссылками на все 3. Я уже написал свои XML, XSD и XSL, но они не работают с ссылками. Вот простой пример, использующий те же ссылки.

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>

1 Ответ

3 голосов
/ 31 марта 2012

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, так что вы можете иметь только один элемент email на файл XML - возможно, у вас должен быть другой корневой элемент над ним.

Обратите внимание, что вы генерируете сомнительный HTML: <td>, который не находится внутри таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...