【发布时间】:2023-04-02 23:00:01
【问题描述】:
这是我的练习代码,将应用于一个基本的 xml 文档:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.xml.com/books"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>XSLT</title>
<style>
h1, p {margin:0;}
</style>
</head>
<body>
<xsl:for-each select="/bookstore/book">
<h1><xsl:value-of select="title"/></h1>
<p>
by
<xsl:for-each select="author">
<xsl:value-of select="text()"/>
</xsl:for-each>
<xsl:text>, </xsl:text>
<xsl:value-of select="year"/><br/>
Price: £<xsl:value-of select="price"/><br/>
<xsl:if test="photo">
<img style="height:200px;">
<xsl:attribute name="src">
<xsl:value-of select="photo"/>
</xsl:attribute>
</img>
</xsl:if>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
- 现在有人告诉我命名空间可以是任何东西。大多数情况下使用 URL。那么为什么,当我尝试这段代码时,一切都会中断,格式化,很多。但是,当我将默认命名空间的标识符更改为“http://www.w3.org/1999/xhtml”时,它可以完美运行,如果它不是 xsl/transform 链接,则与 xsl 命名空间相同。
命名空间只是没有点击我。我理解他们为什么在那里以及他们的目的,但我不明白为什么这样的事情是这样的。
- 另外,当您有两种类型的数据时,xml 和 html,命名空间如何知道哪个是 html 和哪个是 xml 以应用适当的格式?
非常感谢您的帮助!
【问题讨论】:
-
像往常一样,Jeni 说得最好。见The perils of default namespaces。
-
您的问题并不完全清楚。如果你的结果应该是 HTML,那么很自然,你不想将输出元素放在任意命名空间中(尽管许多浏览器会很乐意忽略它)。
-
我只是在这儿闲逛。我要澄清的主要问题是,如果命名空间不是我提到的那些(两个 w3 链接),为什么命名空间会中断。当我读过的所有指南都说命名空间标识符可以是任何东西时。
-
"我只是在这儿玩玩。" 好吧,当问题不具体时,这很难回答。 -- "我读过的所有指南都说命名空间标识符可以是任何东西。" 命名空间标识符不能是任何东西。它们必须符合您和您的接收者之前达成的协议(我假设我们正在讨论您输出中的命名空间)。如果您的目标应用程序希望事物位于命名空间 X 中,那么当它们位于命名空间 Y 中时它将中断。
-
你要我重复我说的话。
标签: xml xslt namespaces