Выбрать тег DIV с помощью XSLT? - PullRequest
1 голос
/ 22 июня 2011

Я пытаюсь создать новый документ XHTML из другого документа XHTML.Я хочу использовать только некоторые теги DIV в старом документе XHTML, но я не уверен, правильно ли я это делаю.Для начала, если я хочу выбрать специальный тег DIV с ID = mbContent, могу ли я использовать

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

Этот тег DIV содержит другие DIV и контент, такой как изображения и т. Д.Как мне поступить, если я хочу использовать тот же стиль CSS, который применяется к контенту?Есть ли способ скопировать стиль CSS или мне нужно добавить новый стиль CSS и как мне это сделать?Поскольку новый документ XHTML станет частью другого XHTML, я не могу использовать тег HEAD и поместить ссылку на таблицу стилей CSS таким образом.

Хмм, но если я буду использовать таблицу стилей CSS, которая будетв заголовке основного документа XHTML, возможно, я мог бы применить эти стили CSS к этому DIV, или?Как применить стили в новом документе XHTML?

Я немного запутался, но надеюсь, что мой вопрос не в том, чтобы сбить с толку ?!:)

Привет!Мне нужна новая помощь, так как приведенный ниже код не работает для меня.Это то, что не работает xmlns:x="http://www.w3.org/1999/xhtml" and "x:div[@id='mbContent']" Я думаю, это потому, что я использую инструмент CMS с прокси-модулем, который по какой-то странной причине не принимает этот код.Поэтому я ищу альтернативное решение, чтобы добавить CLASS или ID, а также добавить значения к элементам DIV, используя вместо этого xsl:apply-templates select="//*[@id='mbSubMenu']", а также использовать копию, как в примере ниже?Точная новая помощь!Спасибо!:)

1 Ответ

1 голос
/ 22 июня 2011

Xpath, используемый в выражении, подходит, пока вы не используете 'x' в качестве xmlns в документе XSLT.

Шаблон будет соответствовать <div> при условии, что его идентификатор равен mbContent, а в выбранном контексте будут все потомки.

Вы можете изменить встроенный CSS для элементов. Поскольку вы сказали, что эта часть будет в каком-то другом документе XHTML. Вы можете выбрать XML в качестве вывода. Измените встроенный CSS, если хотите. Вы также можете назначить им разные классы, чтобы они автоматически принимали глобальные стили.

Идея состоит в том, что, получив XML-документ, вы преобразуете его в другой XML-документ. Поэтому вы можете применять стили, как вам нравится.

Надеюсь, это ответит на ваш вопрос.

P.S. используйте правильные xmlns в выражении XPath.

Предположим, что следующим является 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 в соответствии со своими потребностями.

С уважением,

изнасиловать.

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