使用xml文档处理CSS样式表

用户名

我刚接触XML(现在已经几天了...),一切进展顺利,但是,我似乎无法用CSS样式处理xml

这是我的perl ...

#!/usr/bin/perl -w

use strict;
use warnings;
use diagnostics;
use Text::CSV_XS;

my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1 });
my $ifile="elementarray.csv";
my $ofile="elementarray.xml";
open my $fh, "<", $ifile or die $ifile.": $!";
open my $out, "> ".$ofile or die "Cannot write ".$ofile.": $!";

print $out <<EOT;
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="elementarray.xsl"?>
<?xml-stylesheet href="elementarray.css" title="Default style"?>
<EMAILCOMMENTS>
EOT

# First record contains list of fieldnames
#my $fields = $csv->getline($fh);
#print @$fields;
while (my $row = $csv->getline($fh)) {

    last unless $row && @$row;

    # Encode "<" characters as "&lt;" and "&" as "&amp;" in all fields
    foreach (@$row) {
    s/&/&amp;/g;
    s/</&lt;/g;
    }

    # Create hash of fields using hash slice
    my %row;
    @row{"Subject","Body","From: (Name)","From: (Address)","To: (Name)","To:(Address)","Date","Time"} = @$row;

    print $out <<EOT;
    <EMAIL>
    <HEADER>
        <ORIGNAME>$row{"From: (Name)"}</ORIGNAME>
        <ORIGADDRESS>$row{"From: (Address)"}</ORIGADDRESS>
        <DESTNAME>$row{"To: (Name)"}</DESTNAME>
        <DESTADDRESS>$row{"To: (Address)"}</DESTADDRESS>
        <SUBJECT>$row{"Subject"}</SUBJECT>
    </HEADER>

    <BODY>$row{"Body"}</BODY>
    <DATE id="date">$row{"Date"}</DATE>
    <TIME id="time">$row{"Time"}</TIME>
    </EMAIL>
EOT
}
print $out "</EMAILCOMMENTS>\n";
$csv->eof or $csv->error_diag;
close $fh or die $ifile.": $!";
close $out or die $ofile.": $!";

这是我的xsl ...

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes" method="html"/>
    <xsl:template match="/"><!-- a 'pattern', / matches the root node -->
        <html>
            <head>
                <title>E-mail</title>
            </head>
            <body>
                <xsl:apply-templates/><!-- an instruction -->
            </body>
        </html>
    </xsl:template>
    <xsl:template match="HEADER">
        <span STYLE="color:red; font-weight:bold; font-style:italic">
            <xsl:value-of select="SUBJECT"/>
        </span>
        From: <xsl:call-template name="formatEmail">
                <xsl:with-param name="address" select="ORIGADDRESS"/>
              </xsl:call-template>
        To: <xsl:call-template name="formatEmail">
                <xsl:with-param name="address" select="DESTADDRESS"/>
            </xsl:call-template>
    </xsl:template>
    <xsl:template match="EMAIL">
        <xsl:apply-templates select="HEADER"/>
        <pre>
            <xsl:value-of select="BODY"/>
        </pre>
        <div>
        <span>
        <xsl:attribute name="id"><xsl:value-of select="date"/></xsl:attribute>
        <!-- --><xsl:value-of  select="DATE"/><!-- --></span>
        <span>
        <xsl:attribute name="id"><xsl:value-of select="time"/></xsl:attribute>
        <!-- --><xsl:value-of  select="TIME"/><!-- --></span>
        </div>
    <br />
    </xsl:template>
    <xsl:template name="formatEmail">
        <xsl:param name="address"/>
        <a>
            <xsl:attribute name="href"><xsl:value-of select="concat('mailto:',$address)"/></xsl:attribute>
            <xsl:value-of select="$address"/>
        </a>
    </xsl:template>
</xsl:stylesheet>

这是我的xml(1条记录)...

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="elementarray.xsl"?>
<?xml-stylesheet href="elementarray.css" title="Default style"?>
<EMAILCOMMENTS>
    <EMAIL>
    <HEADER>
        <ORIGNAME>William Holt</ORIGNAME>
        <ORIGADDRESS>&lt;[email protected]></ORIGADDRESS>
        <DESTNAME>X</DESTNAME>
        <DESTADDRESS>[email protected]</DESTADDRESS>
        <SUBJECT>welcome to the neighborhood</SUBJECT>
    </HEADER>

    <BODY>just thought i'd say hello</BODY>
    <DATE id="date">07/18/2013</DATE>
    <TIME id="time">11:53</TIME>
    </EMAIL>
</EMAILCOMMENTS>

这是css(用于查看其是否有效的样式,它不是:()...

DATE{background-color:red;}
TIME{background-color:green;}
#date{background-color:yellow;}
#time{background-color:blue;}
BODY{background-color:grey;}

抱歉,帖子的长度太长了,但我认为您需要所有这些文件...

C队

尽管您确实可以使用CSS为XML设置样式,但是使用xml-stylesheet包含在XML中处理指令,您无法同时使用XSLT对其进行转换。也就是说,您的XML中实际上只应该有一个样式表处理指令。您可以简单地使用CSS对XML进行样式设置(这实际上并不常见),或者使用XSLT将其转换为HTML并使用CSS对HTML输出进行样式设置。

在后一种情况下,请<?xml-stylesheet href="elementarray.css"?>从XML文档中删除指令,而在第一个模板中输出对CSS文档的引用。

<xsl:template match="/">
    <html>
        <head>
            <title>E-mail</title>
            <link href="elementarray.css" type="text/css" rel="stylesheet" />
        </head>
        <body>
            <xsl:apply-templates/>
        </body>
    </html>
</xsl:template>

现在,在CSS中,我看到您已经具有日期时间ID的选择器,因此您需要确保HTML中的相关元素具有这些ID。

目前,您正在XSLT中执行此操作

    <span>
    <xsl:attribute name="id"><xsl:value-of select="date"/></xsl:attribute>
    <!-- --><xsl:value-of  select="DATE"/><!-- --></span>
    <span>

但这是将id属性设置为在XML中具有date元素的值,但是这样的元素不存在!我认为您的意思是在此处使用文字字符串。现在,您可以执行此操作...

<xsl:attribute name="id"><xsl:value-of select="'date'"/></xsl:attribute>

但这很冗长。您可以这样做:

<xsl:attribute name="id">date</xsl:attribute>

但更好的是,只需以常规方式将其写为属性即可:

   <span id="date">
       <xsl:value-of  select="DATE"/>
    </span>

同样,“时间”也是如此。这应确保在您输出的HTML中使用CSS设置两个span标签的样式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

XML可以与CSS样式表进行交互吗?

来自分类Dev

使用JS生成CSS样式表

来自分类Dev

为什么我的CSS样式表不适用于我的HTML文档?

来自分类Dev

如何保持xml样式表?

来自分类Dev

如何使用Dart更改CSS样式表?

来自分类Dev

解析CSS样式表

来自分类Dev

CSS-创建/使用主样式表

来自分类Dev

无法转换XML“样式表不包含文档元素”(除delphi之外均可使用)

来自分类Dev

从XML文件中删除样式表

来自分类Dev

使用文件扩展名处理资产样式表

来自分类Dev

无法在Wordpress中编辑/使用压缩的样式表(css)

来自分类Dev

使用Javascript修改XML元素(在XSLT样式表中)

来自分类Dev

网站的CSS样式表

来自分类Dev

使用JS生成CSS样式表

来自分类Dev

为什么我的CSS样式表不适用于我的HTML文档?

来自分类Dev

使用属性样式表

来自分类Dev

如何保持xml样式表?

来自分类Dev

xml到使用xslt样式表html的html

来自分类Dev

Google日历XML样式表XSL

来自分类Dev

无法使用样式表

来自分类Dev

使用Ionic Framework单击更改CSS样式表

来自分类Dev

XML样式表-Web服务

来自分类Dev

从要处理的文档而不是转换样式表的位置构建集合

来自分类Dev

如何在Android中使用多个xml“样式表”?

来自分类Dev

CSS-创建/使用主样式表

来自分类Dev

如何在React中使用.css样式表?

来自分类Dev

将xml样式表声明添加到Visual Studio生成的XML文档中

来自分类Dev

从样式表中提取 xml 属性

来自分类Dev

html doc 不使用外部 css 样式表