【问题标题】:Select DIV tag with XSLT?使用 XSLT 选择 DIV 标记?
【发布时间】:2011-06-22 08:13:52
【问题描述】:

我正在尝试从另一个 XHTML 文档创建一个新的 XHTML 文档。我只想在旧的 XHTML 文档中使用一些 DIV 标记,但我不确定我是否做得对。首先,如果我想选择一个 ID = mbContent 的特殊 DIV 标签,我可以使用

<xsl:template match="x:div[@id='mbContent']">

此 DIV 标签包含其他 DIV 和内容,如图像等。如果我想使用与内容相同的 CSS 样式,我该怎么做?有没有办法复制 CSS 样式或者我必须添加新的 CSS 样式,我该怎么做?由于新的 XHTML 文档将成为另一个 XHTML 的一部分,因此我不能使用 HEAD 标记并以这种方式引用 CSS 样式表。

嗯,但是如果我使用将在主要 XHTML 文档的 HEAD 中的 CSS 样式表,也许我可以将 CSS 样式应用到这个 DIV,或者?如何在新的 XHTML 文档中应用样式?

我有点困惑,但我希望我的问题不会让人困惑?! :)

嗨!我需要一些新的帮助,因为下面的代码对我不起作用。这是行不通的 xmlns:x="http://www.w3.org/1999/xhtml" and "x:div[@id='mbContent']" 我认为这是因为我使用的 CMS 工具有一个代理模块,由于某些奇怪的原因不接受此代码。因此,我正在寻找一些替代解决方案来添加 CLASS 或 ID,并通过使用它而不是 xsl:apply-templates select="//*[@id='mbSubMenu']" 向 DIV 元素添加值,并且还使用复制,如下例所示?珍惜一些新的帮助!谢谢! :)

【问题讨论】:

标签: xslt xpath xhtml


【解决方案1】:

在 XSLT 文档中使用 'x' 作为 xmlns 之前,表达式中使用的 Xpath 没有问题。

模板将匹配 &lt;div&gt;,前提是其 id 为 mbContent,并且所选上下文将包含所有后代。

您可以更改元素的内联 CSS。既然您说这部分将包含在其他一些 XHTML 文档中。您可以选择 XML 作为输出。 如果您愿意,可以更改内联 CSS。 您还可以为它们分配不同的类,以便自动采用全局样式。

这个想法是,给定一个 XML 文档,您正在将它转换为另一个 XML 文档。 因此,您可以随意应用样式。

我希望这能回答你的问题。

附:在 XPath 表达式中使用正确的 xmlns。

假设以下是 HTML 文档。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title></title>
</head>
<body>
    <div id="mbContent">
        <div>
            <span>Some complex structure</span>
        </div>    
    </div>
</body>

应用以下 XSL

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:x="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="x">

<xsl:output method="xml" indent="yes"/>

<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
</xsl:template>

<xsl:template match="x:div[@id='mbContent']">
    <xsl:copy>
        <xsl:attribute name="class">
            <xsl:text>someNewStyle</xsl:text>
        </xsl:attribute>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

这将导致以下输出。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title/>
</head>
<body>
    <div class="someNewStyle" id="mbContent">
        <div>
            <span>Some complex structure</span>
        </div>
    </div>
</body>

您可以更改 XSL 以满足您的需要。

问候,

狂欢。

【讨论】:

  • 谢谢,尽管我使用 xmlns:x="w3.org/1999/XSL/Transform" 我在 DIV mbContent 之外获取内容。(仅限文本)如何将内联样式应用于此 DIV?
  • 回答您对 DIV mbContent 之外的内容的评论问题(仅在文本中):这似乎是标准内置模板的输出。为避免这种情况,请务必在 XSLT 代码的末尾使用 之类的空模板捕获其他任何内容。
  • 当我在浏览器中尝试上面的代码,然后查看源代码时,没有添加class="someNewStyle"!?我把这行代码 放在 HTML 源代码的第一行?这是通过在实际 XHTML 文档中插入引用来转换 XHTML 文档的唯一方法吗?如果 XSL 文件和 XHTML 文件都在服务器上的同一个文件夹中,我希望你能以其他方式阅读或链接源代码?对我的评论的准确回答! :)
  • 除了在 XHTML 文件中添加 您还需要添加 在文件顶部。它必须是一个 XML 文件。现在,如果您尝试在浏览器中打开 XML 文件,它将向您显示所需的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 2012-01-10
  • 2012-02-27
相关资源
最近更新 更多