我正在尝试使用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) 我有以下两个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) 在我的研究中,一旦我们有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:
<root>
<bar>
<status>456</status>
</bar>
<foo>
<status>123</status>
</foo>
<tablename>foo</tablename>
</root>
Run Code Online (Sandbox Code Playgroud)
如何选择节点的值status,但只选择父节点等于tablename?的值?
非常感谢!
我有一个我在1.0版本中开发的样式表.我需要转换为2.0版才能利用其他一些功能.然而,现在,当我使用以下语法时,我获得了所有结果,而不仅仅是第一个结果.这在v1.0中有效,但在v2.0中不起作用:
//elementName[1]
Run Code Online (Sandbox Code Playgroud)
有一个简单的解决方案吗?
我想检索我正在处理的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
在线搜索我发现有一个模板创建并调用该模板,我想知道为什么我直接无法使用给定的功能谢谢
我有一个数字作为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结构...
<?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的新手.我想使用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字符串,我试图删除所有空的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是否正确实现这样的功能?
我期待这个输出: …