标签: xslt

XSL转换没有采用xml

我正在尝试使用XSL样式表转换XML字符串.但出于某种原因,他只接受我的根元素,而不是其余部分.有些东西可以摇摆不定的wimey probs,但我看不出这个问题..

我将在下面附上我的代码.

XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns0="http://foo.com/foo" xmlns:ns1="http://foo.com/foo" exclude-result-prefixes="ns1">
    <xsl:template match="/">
        <ns0:ProductionOrderRequests>
            <xsl:apply-templates select="ns1:ProductionOrderRequest" />
        </ns0:ProductionOrderRequests>
    </xsl:template>

    <xsl:template match="ns1:ProductionOrderRequest">
            <xsl:apply-templates select="ns1:ProductionOrderRequest" />
    </xsl:template>

    <xsl:template match="ns1:ProductionOrderRequest">
         <ProductionOrderRequest>
            <MESKey><xsl:value-of select="@MESKey" /></MESKey>
            <Material><xsl:value-of select="@Material" /></Material>
            <ProductionVersion><xsl:value-of select="@ProductionVersion" /></ProductionVersion>
            <Resource><xsl:value-of select="@Resource" /></Resource>
            <Plant><xsl:value-of select="@Plant" /></Plant>
            <OrderType><xsl:value-of select="@OrderType" /></OrderType>
            <StartDate><xsl:value-of select="@StartDate" /></StartDate>
            <StartTime><xsl:value-of select="@StartTime" /></StartTime>
            <EndDate></EndDate>
            <EndTime></EndTime>
            <TotalOrderQty><xsl:value-of select="@TotalOrderQty" /></TotalOrderQty>
         </ProductionOrderRequest>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

要转换的XML

<?xml version="1.0" encoding="utf-8"?>
<ProductionOrderRequests xmlns:ns0="http://foo.com/foo">
    <ProductionOrderRequest>
        <MESKey>TblDatProduction_4017</MESKey>
        <Material>11596</Material>
        <ProductionVersion>0001</ProductionVersion>
        <Resource>60200001</Resource>
        <Plant>BE01</Plant>
        <OrderType>ZP76</OrderType>
        <StartDate>24-10-2008</StartDate>
        <StartTime>06:00:00</StartTime>
        <EndDate></EndDate>
        <EndTime></EndTime>
        <TotalOrderQty>1.00</TotalOrderQty> …
Run Code Online (Sandbox Code Playgroud)

c# xml xslt

0
推荐指数
1
解决办法
69
查看次数

模板被调用在它不应该的地方

我有以下两个XML案例.

情况1:

<para>Rent is the sum of money paid by the Tenant to the Landlord for the exclusive use of premises. The Landlord and Tenant signs a <page num="4"/>tenancy agreement which has to be stamped with the tax authorities as required under the Stamp Duties Act. The stamping of a tenancy agreement gives it validity but if the tenancy agreement is not stamped that does not mean</para>
Run Code Online (Sandbox Code Playgroud)

案例2:

<para><page num="5"/>The Writ of Distress proceedings is an effective way to recover …
Run Code Online (Sandbox Code Playgroud)

xslt

0
推荐指数
1
解决办法
77
查看次数

样式表:SchemaLocation属性

在我的研究中,一旦我们有XML Schema Instance命名空间可用,我们就可以使用schemaLocation属性.

就它们在XML标记中的位置而言,命名空间是否始终位于模式位置之前?

这是我的样式表代码.

CarriageDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:SchemaLocation="Carriage_Delivery.xsd"
Run Code Online (Sandbox Code Playgroud)

而我正在尝试切换xmlns:xsi属性的位置,xsi:SchemaLocation就像这样..

CarriageDelivery xsi:SchemaLocation="Carriage_Delivery.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Run Code Online (Sandbox Code Playgroud)

但在我生成的输出中,什么也没发生.

CarriageDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="Carriage_Delivery.xsd"
Run Code Online (Sandbox Code Playgroud)

我希望我能得到一个解释,为什么它总是出现在最后.

xml xslt schema xsd

0
推荐指数
1
解决办法
138
查看次数

动态创建xslt路径

我有以下问题:考虑像这样的xml:

<root>
    <bar>
        <status>456</status>
    </bar>
    <foo>
        <status>123</status>
    </foo>
    <tablename>foo</tablename>
</root>
Run Code Online (Sandbox Code Playgroud)

如何选择节点的值status,但只选择父节点等于tablename?的值?

非常感谢!

xml xslt

0
推荐指数
1
解决办法
59
查看次数

XSLT 2.0破坏了我的样式表

我有一个我在1.0版本中开发的样式表.我需要转换为2.0版才能利用其他一些功能.然而,现在,当我使用以下语法时,我获得了所有结果,而不仅仅是第一个结果.这在v1.0中有效,但在v2.0中不起作用:

//elementName[1]
Run Code Online (Sandbox Code Playgroud)

有一个简单的解决方案吗?

xslt xslt-2.0 xslt-1.0

0
推荐指数
1
解决办法
54
查看次数

如何使用substring-after-last()

我想检索我正在处理的XML文档的名称,我正在使用下面的Xpath.

<xsl:value-of select="fn:base-uri()"/>
Run Code Online (Sandbox Code Playgroud)

我得到的resule有文档的整个路径,如下所示

file:///C:/Users/home/Desktop/files/document/08192014/Raw.xml
Run Code Online (Sandbox Code Playgroud)

因此,为了获得XML文档的唯一名称,在Altova中,智能显示了一些功能substring-after-last(),我在下面使用它.

 <xsl:value-of select="substring-after-last(fn:base-uri(),'/')"/>
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到了一些错误

Unknown function 'substring-after-last'
    Warning location: xsl:stylesheet / xsl:template / html / body / section / div 
    / xsl:value-of / @select
    Details
        XPST0017: The function call 'substring-after-last' does not match the 
        name of a function in the static context
Run Code Online (Sandbox Code Playgroud)

请让我知道如何解决这个问题并获取文件名,同样的错误也被抛出,substring-before-last()以及Altova中给出的一些其他功能.

我使用XSLT 2.0

在线搜索我发现有一个模板创建并调用该模板,我想知道为什么我直接无法使用给定的功能谢谢

xslt xpath

0
推荐指数
1
解决办法
3012
查看次数

使用xslt附加到数字

我有一个数字作为xml中的元素.我需要追加0才能使它成为5位数.如果它是1,那么我需要转换为00001如果它是12,那么我需要转换为00012如果它是123,那么我需要转换为00123如果它是1234,那么我需要转换为01234

输入

<id>23</id>
Run Code Online (Sandbox Code Playgroud)

产量

<id>00123</id>
Run Code Online (Sandbox Code Playgroud)

而不是多次写条件如何使用xslt在单一条件下完成它

xml xslt

0
推荐指数
1
解决办法
129
查看次数

XSL v1.0和XPath遍历深度嵌套并递归求和所有行

我到处都在寻找其他解决方案,并尝试了各种方法,但仍然无济于事...

这是XML结构...

<?xml version="1.0" encoding="UTF-8"?>
<query>
    <continueToken/>
    <results total="15">
        <result recordId="16672888">
            <columns>
                <column>
                    <field>AmountNU</field>
                    <LI_Amount><![CDATA[$4,000.00]]></LI_Amount>
                    <LI_Amount_display><![CDATA[$4,000.00]]></LI_Amount_display>
                </column>
            </columns>
        </result>
        <result recordId="16672889">
            <columns>
                <column>
                    <field>AmountNU</field>
                    <LI_Amount><![CDATA[$3,000.00]]></LI_Amount>
                    <LI_Amount_display><![CDATA[$3,000.00]]></LI_Amount_display>
                </column>
            </columns>
        </result>
        <result recordId="16672890">
            <columns>
                <column>
                    <field>AmountNU</field>
                    <LI_Amount><![CDATA[$2,000.00]]></LI_Amount>
                    <LI_Amount_display><![CDATA[$2,000.00]]></LI_Amount_display>
                </column>
            </columns>
        </result>
    </results>
</query>
Run Code Online (Sandbox Code Playgroud)

到目前为止,这里是XSL。这只是较大脚本的一小部分,因此您将看到与当前问题相关的其他内容。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:datetime="http://exslt.org/dates-and-times"
xmlns:exsl="http://exslt.org/common"
exclude-result-prefixes="datetime">
    <xsl:output method="text" encoding="UTF-8" indent="no"/>

    <xsl:template match="/">
        <xsl:call-template name="fixTheWidth" >
            <!-- This parameter is a Id for each group of records based on the result/@recordId attribute. This groups all records …
Run Code Online (Sandbox Code Playgroud)

xslt recursion xpath xslt-1.0

0
推荐指数
1
解决办法
598
查看次数

如何使用xslt生成随机UUID

我是xslt的新手.我想使用xslt生成32位长的UUID并将其添加到xml作为输入.我试图使用数学自由的随机函数,但得到错误.

输入XML

<users xmlns="ABC_Login">
   <email>ABC@gmail.com</email>
</users>
Run Code Online (Sandbox Code Playgroud)

XSLT代码段

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns1="ABC_Login"  xmlns:math="http://exslt.org/math"
extension-element-prefixes="math" version="2.0">
    <xsl:template match="/ns1:users">
        <users>
            <email>
                <xsl:value-of select="ns1:email" />
            </email>
            <UUID>
                <xsl:value-of select="(floor(math:random()*10) mod 10) + 1" />
            </UUID>
        </users>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

我正在使用在线编辑器,但获得如下例外.http://xslttest.appspot.com/

错误:找不到名为{ http://exslt.org/math } random()的匹配0参数函数.没有撒克逊扩展函数,本地名称是随机的

实际上我需要使用xslt生成随机令牌并将其添加到输入xml中.

预期产出

<users xmlns="ABC_Login">
       <email>ABC@gmail.com</email>
       <uuid>7B81A9B0D9-CA0E-E70F-ADFF-116EE7A1A980<</uuid>
    </users>
Run Code Online (Sandbox Code Playgroud)

在这方面有人可以帮助我.最好的祝福,

xml xslt xslt-2.0

0
推荐指数
1
解决办法
9810
查看次数

XSLT无法处理实体

我有一个XML字符串,我试图删除所有空的XML标签和空格.为此,我使用以下XSL表:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:strip-space elements="*"/>

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

 <xsl:template match="*[not(*) and not(text()[normalize-space()])]"/>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

我的输入String XML例如:

String s = "<main>           <test>123öü aksdjf0192301ß09aasdfg   0</test>            <test> </test>  <test>12031</test>"

             + "\n" +

             "<test>" + "</test>" + "</main>";
Run Code Online (Sandbox Code Playgroud)

对于XSL转换,我使用以下Java代码:

StringReader reader = new StringReader(xmlContent);
  StringWriter writer = new StringWriter();
  TransformerFactory tFactory = TransformerFactory.newInstance();
  Transformer transformer = tFactory.newTransformer(new javax.xml.transform.stream.StreamSource(
     "style.xsl"));
  transformer.transform(new javax.xml.transform.stream.StreamSource(reader),
     new javax.xml.transform.stream.StreamResult(writer));
  String result = writer.toString();
Run Code Online (Sandbox Code Playgroud)

我的输出是:

<?xml version="1.0" encoding="UTF-8"?><main><test>123öü aksdjf0192301ß09aasdfg   0</test><test>12031</test></main>
Run Code Online (Sandbox Code Playgroud)

这正是我的预期结果,但是当我在输入字符串中添加一个实例,例如'&'时,转换失败.

出现错误: 实体名称必须紧跟实体引用中的"&".

我该如何解决这个问题?XSL是否正确实现这样的功能?

我期待这个输出: …

java xml xslt

0
推荐指数
1
解决办法
117
查看次数

标签 统计

xslt ×10

xml ×6

xpath ×2

xslt-1.0 ×2

xslt-2.0 ×2

c# ×1

java ×1

recursion ×1

schema ×1

xsd ×1