小编Car*_*sap的帖子

如何复制任何类型的模板上下文元素的所有子节点

我正在使用XSLT将XML转换为HTML.

我有以下XML结构:

<root>
    <element>
        <subelement>
            This is some html text which should be <span class="highlight">displayed highlighted</span>.
         </subelement>
    </element>
</root>
Run Code Online (Sandbox Code Playgroud)

我使用以下模板进行转换:

<xsl:template name="subelement">
  <xsl:value-of select="." />
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

不幸的是,我失去了<span>-tags.

有没有办法保留它们以便正确显示HTML(突出显示)?

xslt xslt-1.0

14
推荐指数
2
解决办法
7万
查看次数

尝试使用XSLT 2.0在HTML <style>元素中嵌入包含'>'子选择器的CSS

我的文件base.css包含:

ol > li { color: red; }
Run Code Online (Sandbox Code Playgroud)

我尝试读取它并使用XSLT 2.0未解析文本(Saxon 9.1.0.2J)将其渲染到我的HTML输出中,如下所示:

<style>
  <xsl:sequence select="unparsed-text(fn:iri-to-uri($CSS-BASE-FILE))"/>
</style>
Run Code Online (Sandbox Code Playgroud)

但是,unparsed-text()函数将'>'转换为'>' 在HTML中,像这样:

<style>
ol &gt; li { color: red; }
</style>
Run Code Online (Sandbox Code Playgroud)

...哪个不像"ol> li"那样.

如何使用XSLT将'>'字符渲染到我的元素中?我尝试过使用replace(...,'>','>'),但仍会呈现'>' 进入HTML.

或者,是否有另一种方法可以指定CSS子选择器而无需在我的HTML中嵌入文字">"字符?

html css xslt

7
推荐指数
1
解决办法
331
查看次数

在XPath 2.0中表达集合相等的自动方式

如果$ A和$ B是序列,那么测试$ A和$ B的集合平等的首选方法是什么?我知道存在的语义行为($A = $B)使得这个表达不是答案.排序语义也deep-equal()禁止我使用它.

我的冲动是使用:

((every $a in $A satisfies $a = $B) and (every $b in $B satisfies $b = $A))
Run Code Online (Sandbox Code Playgroud)

我发现通过谷歌进行集合平等测试的确很少(确切地说,我发现什么都没有),我没有在@ Michael-Kay的第8章,第9章,第10章或第13章中看到它.我很难相信我是第一个遇到这种需求的XPath用户.这让我想知道我是否提出了错误的问题.

xslt xslt-2.0 xpath-2.0

7
推荐指数
1
解决办法
226
查看次数

perl -i*是如何实现的?

http://perldoc.perl.org/perlrun.html对Perl -i[extension]功能的描述中,与以下程序实质上相同的代码作为"等效"使用:perl -pi.orig ...

#!/usr/bin/perl

use strict;
use warnings;

my $extension = '.orig';
my $oldargv = '';
my $backup;
LINE: while (<>) {
    if ($ARGV ne $oldargv) {
        if ($extension !~ /\*/) {
            $backup = $ARGV . $extension;
        } else {
            ($backup = $extension) =~ s/\*/$ARGV/g;
        }
        rename($ARGV, $backup);
        open(ARGVOUT, ">$ARGV");
        select(ARGVOUT);
        $oldargv = $ARGV;
    }
    # Don't change anything; just copy.
}
continue {
    print;
}
select(STDOUT);
Run Code Online (Sandbox Code Playgroud)

这个工作正常$extension eq '.orig'; 但是,Perl也定义-i了没有扩展名(也就是for …

perl stdin

7
推荐指数
1
解决办法
178
查看次数

如何在选项的子中访问Getopt :: Long选项的值?

我的目标是有一个--override=f选项来操纵其他两个选项的值.诀窍是解决如何参考选项的值(匹配部分f=f的标志符)sub的是执行的时候GetOptions检测在命令行上的选项的存在.

我是这样做的:

$ cat t.pl
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
our %Opt = (
    a   => 0,
    b   => 0,
);
our %Options = (
    "a=f"       => \$Opt{a},
    "b=f"       => \$Opt{b},
    "override=f"    => sub { $Opt{$_} = $_[1] for qw(a b); },  # $_[1] is the "trick"
);
GetOptions(%Options) or die "whatever";
print "\$Opt{$_}='$Opt{$_}'\n" for keys %Opt;

$ t.pl --override=5
$Opt{a}='5'
$Opt{b}='5'

$ t.pl --a=1 --b=2 --override=5 --a=3
$Opt{a}='3'
$Opt{b}='5' …
Run Code Online (Sandbox Code Playgroud)

perl getopt-long

5
推荐指数
1
解决办法
579
查看次数

对排序序列进行的操作不遵守排序顺序

我无法理解为什么 XSLT(Saxon 9.1 和 9.5)在使用包含排序序列的变量时以这种方式工作。

这是我的程序的输出,其中嵌入了我的三个问题:

<?xml version="1.0" encoding="UTF-8"?>
The following sequence is unsorted...

  sequence $list                        = (<contribution e="4"/><contribution e="1"/><contribution e="2"/><contribution e="8"/>)

It is, as I expected, in document order.

The following sequence is explicitly sorted...

  sequence $sorted-list                 = (<contribution e="8"/><contribution e="4"/><contribution e="2"/><contribution e="1"/>)

It is, as I expected, sorted in descending numerical @e order.

In the following output, I expect for the @e values from $list to be in document order,
and for the @e values from $sorted-list to …
Run Code Online (Sandbox Code Playgroud)

xml sorting xslt saxon

5
推荐指数
1
解决办法
192
查看次数

为什么(a => 1,b => 2){a}语法错误?

我想在表达式中使用哈希.没问题:

use strict;
use warnings;
my %h = (a=>1, b=>2);
my $h = $h{a};
print "h='$h'\n";
Run Code Online (Sandbox Code Playgroud)

但由于我只提到它一次,我不想命名它.天真地用哈希内容替换$ h不起作用.以下代码在"){"的第3行产生语法错误:

use strict;
use warnings;
my $x = (a=>1, b=>2){a};
print "x='$x'\n";
Run Code Online (Sandbox Code Playgroud)

我知道以下是实现我需要的方法:

use struct;
use warnings;
my $y = {a=>1, b=>2}->{a};
print "y='$y'\n";
Run Code Online (Sandbox Code Playgroud)

为什么第二个例子不起作用?

编辑1:这是一个MVCE.在现实生活中,我的哈希键(本例中为'a')不是常量.

编辑2:关于我的动机更多一点:我不想在我的代码中使用不必要的变量范围,所以如果我将%h的范围限制在它真正属于的范围,我会这样:

use strict;
use warnings;
my $h;
{
    my %h = (a=>1, b=>2);
    $h = $h{a};
}
print "h='$h'\n";
Run Code Online (Sandbox Code Playgroud)

我不想将%h留在范围内以获得比我需要的代码更多的代码,但是使用额外的块来编写代码段也很笨拙.这就是为什么我正在寻找一种干净的单行方式来完成任务.

perl

4
推荐指数
1
解决办法
134
查看次数

如何在不损失精度的情况下打印Perl bignum?

#!/usr/bin/perl
use strict;
use warnings;
my $s = "1234567890.123456789";
{   
    no bignum; printf "bignum==%s\n", bignum::in_effect() // 0;  
    my $x = $s; 
    printf "%29s\n", $x; 
    printf "%29.9f\n\n", $x; 
}   
{   
    use bignum; printf "bignum==%s\n", bignum::in_effect() // 0;
    my $x = $s; 
    printf "%29s\n", $x; 
    printf "%29.9f\n\n", $x; 
}   
Run Code Online (Sandbox Code Playgroud)

使用%f转换的My Perl的printf(为darwin-thread-multi-2level构建的ActiveState v5.10.1)不会使我的值超过1e-6数字,即使使用bignum:

$ t.pl
bignum==0
         1234567890.123456789
         1234567890.123456717

bignum==1
         1234567890.123456789
         1234567890.123456717
Run Code Online (Sandbox Code Playgroud)

如何在不丢失精度的情况下打印输入?

真正的问题是我需要操纵这个数字(例如,$ x/0.000_000_001,或者更糟糕的是,$ x/0.000_001_024,我不能用substr()函数调用来伪装),但是在我能够进入"有趣"部分之前,目前的减少让我感到难过.

perl printf bignum

3
推荐指数
1
解决办法
520
查看次数

标签 统计

perl ×4

xslt ×4

bignum ×1

css ×1

getopt-long ×1

html ×1

printf ×1

saxon ×1

sorting ×1

stdin ×1

xml ×1

xpath-2.0 ×1

xslt-1.0 ×1

xslt-2.0 ×1