我对XSL很新,需要帮助解决转换问题.我有一个由XSD描述的
XML文件.我使用XSL文件将
XML转换为HTML.我想在XML文件中引用XSD,但是当我这样做时,XML不会被转换.
示例XML:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="example.xsl"?> <root> <!-- <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://localhost" xsi:schemaLocation="http://localhost example.xsd"> --> <element>Element 1</element> <element>Element 2</element> <element>Element 3</element> </root>
示例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="/"> <ul> <xsl:for-each select="root/element"> <li><xsl:value-of select="."/></li> </xsl:for-each> </ul> </xsl:template> </xsl:stylesheet>
示例XSD:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://localhost" xmlns="http://localhost" elementFormDefault="qualified"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="element" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
在XML中,如果我使用注释掉的root标签,Firefox和Chrome不会转换xml.如果我只使用普通的< root>然而,标签变换很好.
任何人都可以解释为什么在我的XML中引用XSD时不会发生XSL转换?任何帮助表示赞赏!
解决方法
<!-- <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://localhost" xsi:schemaLocation="http://localhost example.xsd"> -->
这与使用XML Schema无关.问题是您指定了默认命名空间.
在默认命名空间中使用XPath表达式来表示节点名称是最大的XPath FAQ.
请在xpath和xslt标签中搜索“默认命名空间”,你会找到很多好的答案.
XSLT的解决方案是声明一个带有一些前缀(比如“x”)和namespace-uri的命名空间,它与XML文档中默认命名空间的namespace-uri相同.然后在任何XPath表达式中使用x:name而不是name.
因此,您的XSLT代码变为:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://localhost" exclude-result-prefixes="x" > <xsl:template match="/"> <ul> <xsl:for-each select="x:root/x:element"> <li> <xsl:value-of select="."/> </li> </xsl:for-each> </ul> </xsl:template> </xsl:stylesheet>
当应用于提供的XML文档时,使用未注释的< root>元件:
<root xmlns="http://localhost" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://localhost example.xsd"> <element>Element 1</element> <element>Element 2</element> <element>Element 3</element> </root>
产生了想要的正确结果:
<ul> <li>Element 1</li> <li>Element 2</li> <li>Element 3</li> </ul>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。