我下载了Netbeans 8.0.1来创建一些XSLT
文件。这是一个小例子:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Title</th>
<th style="text-align:left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
如果您有一个简单的Netbeans
文件或一个简单的XSLT
文件,HTML
的自动完成功能就可以顺利完成。但是如果你混淆这两个文件,自动完成功能只适用于XSLT
从<html>
代码开始,我不再拥有自动填充功能,即使不是文件末尾的XSLT
代码也是如此。
有谁知道这是一个错误,还是只是为HTML
和XSLT
使用自动填充的一些设置?
答案 0 :(得分:1)
神圣GNU,在整整一个下午之后,我设法让XSL和HTML自动完成同一个XSL文件。
下载HTML5的XSD版本
HTML不是XML,所以我们必须看看XHTML5(HTML序列化为XML)。我从there
获取了XSD告诉netbeans使用它
xhtml命名空间http://www.w3.org/1999/xhtml必须使用我们已下载的XSD。因此,在工具→DTD&amp; XML Schema→用户目录,在System ID
为http://www.w3.org/1999/xhtml
且URI
为the xhtml5.xsd you've downloaded
的位置添加本地架构。
您可能需要重新启动netbeans(我实际上重复了很多次,我无法判断它是否需要)。
在XSL中使用xhtml命名空间
现在,在XSL中,告诉您在根节点上使用带有属性xmlns="http://www.w3.org/1999/xhtml"
的xhtml命名空间。
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
您还可以将此xmlns
属性添加到每个最顶级的html节点(也就是每个在其祖先中没有html节点的html节点)。您还可以在根节点上使用xmlns:html
,并使用<html:*>
而不是<*>
个节点。如果您有多个名称空间,例如HTML+SVG+MathML+XSL
。
享受html自动完成
然后您应该自动完成html。它要求您明确键入第一个html
标记,但一旦在html
标记内,自动完成就会生效(因此,如果您在{{table
内进行xsl:template
1}},您仍然需要输入<table>
,但一旦进入内部,自动完成会提示<caption>
,<thead>
等内容。
如何在HTML中自动完成XSL?
需要在xhtml的XSD中进行编辑。我们必须在XSD的根节点上使用xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
在XSD中声明XSL名称空间。然后,我们必须在XSD中告诉每个 HTML节点都可以包含一个XSL节点。这是通过在所有元素组<xs:any namespace="http://www.w3.org/1999/XSL/Transform" processContents="skip"/>
中使用<xs:group>
来完成的。
完成这些编辑后,XSD会说&#34;每个HTML节点都可以包含来自XSL命名空间&#34; 的元素,因此Netbeans会自动完成也会建议XSL节点。
您可以使用此处下载已编辑过的XSD:http://xenos.reinom.com/stackoverflow/xhtml5.xsd
如果你想知道,我做了很长的详细回复,如果你想混合使用XSL和SVG或XSL以及任何其他XML-XSDed格式,你也可以这样做。