标签: exslt

XSLT名称空间声明中的exclude-result-prefixes和extension-element-prefix有什么区别?

exclude-result-prefixes和之间有什么区别extension-element-prefix?两者都用在XSLT的头文件中.我发现extension-element-prefix在使用EXSLT和EXSLT网站时Howto说它extension-element-prefix用于"阻止扩展命名空间在结果树中输出".

事实并非如此(使用libxslt).仅exclude-result-prefixes删除扩展名称空间.那么我为什么需要extension-element-prefix???

样品:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl="http://exslt.org/common" version="1.0"
  extension-element-prefix="exsl">

<xsl:template match="/">
  <blabla/>
</xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

我的输出与libxslt(xsltproc):

<?xml version="1.0"?>
<blabla xmlns:exsl="http://exslt.org/common"/>
Run Code Online (Sandbox Code Playgroud)

xslt namespaces exslt

18
推荐指数
1
解决办法
2万
查看次数

使用XSLT/XPath在其父级中查找元素的位置

除了重写大量的XSLT代码(我不打算这样做)之外,当上下文被任意设置为其他内容时,有没有办法在其父级中找到元素的位置?这是一个例子:

<!-- Here are my records-->
<xsl:for-each select="/path/to/record">
  <xsl:variable name="record" select="."/>

  <!-- At this point, I could use position() -->
  <!-- Set the context to the current record -->
  <xsl:for-each select="$record">

    <!-- At this point, position() is meaningless because it's always 1 -->
    <xsl:call-template name="SomeTemplate"/>
  </xsl:for-each>
</xsl:for-each>


<!-- This template expects the current context being set to a record -->
<xsl:template name="SomeTemplate">

  <!-- it does stuff with the record's fields -->
  <xsl:value-of select="SomeRecordField"/>

  <!-- How to access the record's position …
Run Code Online (Sandbox Code Playgroud)

xslt xpath position exslt

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

XSLT:根据条件设置多个变量

我想根据一个条件环境分配多个变量.我知道如何只为一个变量做到这一点:

<xsl:variable name="foo">
    <xsl:choose>
        <xsl:when test="$someCondition">
            <xsl:value-of select="3"/>
        <xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="4711"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

但是,如果我想根据相同的条件$ someCondition分配两个变量呢?

我不想再次编写相同的xsl:choose语句,因为它在实际示例中有点冗长且计算密集.

有问题的环境是带有exslt扩展的libxslt(xslt 1.0).

编辑:我想要的是一种类似的行为

if (condition) {
    foo = 1;
    bar = "Fred";
}
else if (...)  {
    foo = 12;
    bar = "ASDD";
}
(... more else ifs...)
else {
    foo = ...;
    bar = "...";
}
Run Code Online (Sandbox Code Playgroud)

xslt exslt xslt-1.0

10
推荐指数
1
解决办法
1万
查看次数

获取exsl:node-set在PHP中工作

我有以下PHP代码,但它不起作用.我没有看到任何错误,但也许我只是失明.我在PHP 5.3.1上运行它.

<?php
$xsl_string = <<<HEREDOC
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:exsl="http://exslt.org/common"
                extension-element-prefixes="exsl">
  <xsl:template match="/">
    <p>Hello world</p>
    <xsl:variable name="person">
      <firstname>Foo</firstname>
      <lastname>Bar</lastname>
      <email>test@example.com</email>
    </xsl:variable>
    <xsl:value-of select="exsl:node-set(\$person)/email"/>
  </xsl:template>
</xsl:stylesheet>
HEREDOC;

$xml_dom = new DOMDocument("1.0", "utf-8");
$xml_dom->appendChild($xml_dom->createElement("dummy"));

$xsl_dom = new DOMDocument();
$xsl_dom->loadXML($xsl_string);

$xsl_processor = new XSLTProcessor();
$xsl_processor->importStyleSheet($xsl_dom);
echo $xsl_processor->transformToXML($xml_dom);
?>
Run Code Online (Sandbox Code Playgroud)

此代码应输出"Hello world",然后输出"test@example.com",但不会显示电子邮件部分.知道什么是错的吗?

-Geoffrey Lee

php xml xslt exslt

9
推荐指数
1
解决办法
1209
查看次数

如何在Saxon-HE中获得EXSLT支持?

我有一堆XSLT文件,我需要处理一些XML文件.我无法更改XSLT文件,因为它们来自第三方.XSLT是2.0版.

我使用的是Mac OS X 10.6,它看起来像Saxon-HE是唯一可用的XSLT 2.0处理器.

大多数XSLT的工作正常,但有些会给出有关缺失函数的错误,特别是month-in-year()其他日期/时间相关的函数.

根据 关于EXSLT的http://www.saxonica.com/documentation/extensions/exslt.xml:

这些扩展可在Saxon-PE和Saxon-EE中"开箱即用".它们不适用于Saxon-HE

无论如何我可以使用Saxon-HE的EXSLT功能吗?

如果可行,我很乐意转移到另一个工具/处理器.

xml xslt saxon exslt

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

如何从EXSLT中获取Regexp在libxslt中工作?

有没有人Regexp在libxslt工作?什么时候,怎么样?

http://www.exslt.org/regexp/index.html

当使用xsltproc --dumpextensions带有最新libxslt 的命令时,我没有获得任何Regexp支持:-(

regex xslt exslt libxslt

6
推荐指数
1
解决办法
1225
查看次数

xsl:variable包含节点集。如何输出变量的第n个节点?

我正在转换XML文档。有一个属性@prettydate,该字符串是类似于“ 2010年5月7日,星期五”的字符串。我想拆分该字符串并添加指向月份和年份的链接。我正在使用该exslt:strings模块,并且可以添加任何其他必要的EXSLT模块。

到目前为止,这是我的代码:

<xsl:template match="//calendar">
    <xsl:variable name="prettyparts">
        <xsl:value-of select="str:split(@prettydate,', ')"/>
    </xsl:variable>

    <table class='day'>
        <thead>
            <caption><xsl:value-of select="$prettyparts[1]"/>, 
                    <a>
                        <xsl:attribute name='href'><xsl:value-of select="$baseref"/>?date=<xsl:value-of select="@highlight"/>&amp;per=m</xsl:attribute>
                        <xsl:value-of select='$prettyparts[2]'/>
                    </a> 
                    <xsl:value-of select='$prettyparts[3]'/>,  
                    <a>
                        <xsl:attribute name='href'><xsl:value-of select="$baseref"/>?date=<xsl:value-of select="@highlight"/>&amp;per=y</xsl:attribute>
                        <xsl:value-of select='$prettyparts[4]'/>
                    </a> 
            </caption>
<!--etcetera-->
Run Code Online (Sandbox Code Playgroud)

我已经通过运行$ prettyparts验证了<xml:for-each/>我正在获得预期的节点集:

<token>Friday</token>
<token>May</token>
<token>7</token>
<token>2010</token>
Run Code Online (Sandbox Code Playgroud)

但是,无论我尝试以哪种方式<token>直接引用某个特定对象(而不是在foreach中),我都不会得到与无效类型有关的任何错误或各种错误。这是我尝试过的一些语法:

<xsl:value-of select="$prettyparts[2]"/>
<xsl:value-of select="$prettyparts/token[2]"/>
<xsl:value-of select="exsl:node-set($prettyparts/token[2])"/>
<xsl:value-of select="exsl:node-set($prettyparts/token)[2]"/>
Run Code Online (Sandbox Code Playgroud)

知道表达应该是什么吗?

预计到达时间:感谢@DevNull的建议,正确的表达为:

<xsl:value-of select="exsl:node-set($prettyparts)[position()=2]"/>
Run Code Online (Sandbox Code Playgroud)

并且,我必须以这种方式设置变量:

<xsl:variable name="prettyparts" select="str:split(@prettydate,', ')" />
Run Code Online (Sandbox Code Playgroud)

xslt split exslt nodes

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

EXSLT:没有更多的DTM ID可用

我一整天都在寻找这个问题的答案.我正在为中等大小的XML文档(~1.5MB,~1000个元素)创建样式表,这给我带来了很多麻烦.它是关于为不同的加工厂设备创建事件 - 时间线图.XML是通过SAP MII QueryTempalte thingy生成的,并且采用/ Rowsets/Rowset/Row格式.所有这些数据都以/设备/设备/事件格式处理并存储在本地节点集中.然后将此节点集处理为HTML,然后在浏览器中呈现.现在,我开始遇到麻烦了.我可以轻松地提取过去5天的数据,从而导致来自MII的约900行数据,并被处理为我的节点格式,导致不到900行.但第二个我从MII获取了1017行,样式表只会渲染大约一半,然后停止并且"没有更多的DTM ID可用"异常.现在,MII服务器只运行JDK 1.5.x,我读过,这可能是一个问题 - 唯一的问题是,我对此无能为力.所以现在我在这里问:有没有办法优化我的代码?我为我的XSL和示例XML附加了一些链接.

XSL:http: //pastie.org/1566517 Samlpe XML:http://pastie.org/1566522

现在,示例XML可能不会产生任何"有趣"的可视结果,并且无法复制错误.但是,如果有人能够发现obvoius优化,我很想知道:)我一直在想,替换/移动startOffset,endOffset等的计算会很好,但我无法弄清楚如何.

希望可以有人帮帮我!:)

xml xslt xalan exslt

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

如何在JBoss eap 6.1服务器中启用XSLT 2.0处理器,以摆脱XSLT 2.0功能不可用的错误

我在XSLT 2.0中尝试日期格式化.当我尝试在我的工作区中运行它时运行正常,我得到了适当的响应.但是当我在JBoss eap 6.1上部署我的jar后尝试实现相同的功能时,我得到以下错误:

16:35:02,311错误[XSLTUtil](DefaultQuartzScheduler-camel-12_Worker-2)XSLTUtil | 0 | TransformerException:使用xslt文件转换xml时出错:javax.xml.transform.TransformerException:org.xml.sax.SAXException:找不到函数:format-dateTime javax.xml.transform.TransformerException:找不到函数:format-dateTime |

我的Xsl文件:这里我试图使用format-dateTime将当前日期格式化为其他格式.

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version='2.0'
    xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:func="http://exslt.org/functions" 
    xmlns:date="http://exslt.org/dates-and-times" 
    date:doc="http://www.exslt.org/date" exclude-result-prefixes="date func">

    <xsl:import href="date.xsl"/>
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />
    <xsl:template match="/">
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:max="http://www.ibm.com/maximo">
            <soapenv:Header/>
            <soapenv:Body>
                <max:CreateMXINCIDENT_WSTB creationDateTime="" baseLanguage="" transLanguage="" messageID="" maximoVersion="">
                    <max:MXINCIDENT_WSTBSet>
                        <max:MXINCIDENT_WST action="" relationship="" deleteForInsert="" transLanguage="">
                            <max:MAXINTERRORMSG></max:MAXINTERRORMSG>
                            <max:ACTIVITY changed="true">
                                <xsl:value-of select='/tTroubleticket/activity' />
                            </max:ACTIVITY>
                            <max:BLOCK changed="">
                                <xsl:value-of select='/tTroubleticket/block' />
                            </max:BLOCK>
                            <max:CHANGEBY changed="true">AOS</max:CHANGEBY>
                            <max:CHANGEDATE changed="true">
                                <xsl:value-of select="format-dateTime(current-dateTime(), '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01].[f001][Z]')" />
                            </max:CHANGEDATE>
                            <max:CLASS changed="true">INCIDENT</max:CLASS>
                            <max:COMMERRORTYPE changed="true">
                                <xsl:value-of select='/tTroubleticket/commErrorType' />
                            </max:COMMERRORTYPE> …
Run Code Online (Sandbox Code Playgroud)

java xml xslt jboss exslt

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

需要在 XSLT 1.0 中创建带参数的函数

在创建带参数的函数时需要一些帮助,并且可以在我的模板中使用该函数。尝试了很多事情但没有任何结果。下面是我的示例代码:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"
    xmlns:math="http://exslt.org/math"
    xmlns:func="http://exslt.org/functions"
    xmlns:my="http://exslt.org/my"
    exclude-result-prefixes="my"
    extension-element-prefixes="my math func">
    <xsl:output indent="yes" method="xml" />

    
    <xsl:variable name="functionTest11"> 
      <xsl:value-of select="my:calXY('aa')" />
    </xsl:variable>
    
    <xsl:template match="/">

        <svg xmlns="http://www.w3.org/2000/svg">
            <xsl:variable name="functionTest22"> 
                <xsl:value-of select="my:calXY" />
            </xsl:variable>
            <xsl:comment>functionTest <xsl:copy-of
              select="$functionTest22" /></xsl:comment>
        </svg>

    </xsl:template>
    
    <func:function name="my:calXY">
        <xsl:comment>functionHello </xsl:comment>
        <xsl:param name="string1" select="''"/>
        <func:result>
            <xsl:value-of select="concat(10,'|',10)" />
        </func:result>
    </func:function>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

exslt xslt-1.0

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

标签 统计

exslt ×10

xslt ×9

xml ×4

xslt-1.0 ×2

java ×1

jboss ×1

libxslt ×1

namespaces ×1

nodes ×1

php ×1

position ×1

regex ×1

saxon ×1

split ×1

xalan ×1

xpath ×1