xslt-1.0 相关问题

将此标记用于特定于XSL转换版本1.0的问题,而不是其他版本。

XSLT 1.0 追踪 XML 对象的继承树

我正在编写一个 XSLT 以将 XML 模式转换为 Python 类。该模式具有深入七到八个类的深层继承树,我需要从...开始编写输出

回答 1 投票 0

XSLT concat,翻译为大写

我正在尝试使用以下编码在 XSLT 中连接并转换为大写: 然而,它...

回答 1 投票 0

XSLT 1.0 复制并删除节点

我必须复制一个节点(Set_Item/ForwarderReferenceNumber)以防倍增,然后删除我们从中获取值的节点“Set_Item”。 找到相同的 Set_Item(但不同...

回答 1 投票 0

如何使用 XSL 1.0 分割文件路径

我们的测试执行人员使用样式表来生成测试报告。我们正在努力定制该报告。 由于对 XSL 和 Xpath 的了解有限,我正在尝试获取文件 pat 的各个组件...

回答 1 投票 0

使用 xslt 从 Excel 的 xml 文件中的 CRLF 输入创建 LF 输出时出现问题

我有一些 XML,我想将其转换为 Excel 将在表中打开的 XML。 但是,我的一些源数据使用字符串 表示 CRLF 并创建一个新行。 我明白...

回答 2 投票 0

类似项目的按键分组XSLT1.0

强文字 我需要对不同级别的 Itemno 进行分组 前任: 1级:8000000377 - 1 8000000376 - 1 8000000378 - 2 8000000373 - 1 8000000371 - 1 2级:8000000373 - 2 ...

回答 1 投票 0


XSLT 生成具有多个默认名称空间的文档

我正在尝试生成以下形式的 XML 文档: 我正在尝试生成以下形式的 XML 文档: <?xml version="1.0" encoding="utf-8"?> <Root xmlns="http://a.example.com"> <Header xmlns="http://b.example.com"> <Fr> <OrgId> <Id>hello</Id> </OrgId> </Fr> <To> <OrgId> <Id>goodbye</Id> </OrgId> </To> </Header> </Root> 我有以下 XSLT: 请注意,这是 XSLT 1.0,因为我使用的是 .Net(.Net Framework) <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <Root xmlns="http://a.example.com"> <Header xmlns="http://b.example.com"> <Fr> <xsl:apply-templates select="/Trades"> <xsl:with-param name="Id">hello</xsl:with-param> </xsl:apply-templates> </Fr> <To> <xsl:apply-templates select="/Trades"> <xsl:with-param name="Id">goodbye</xsl:with-param> </xsl:apply-templates> </To> </Header> </Root> </xsl:template> <xsl:template match="/Trades"> <xsl:param name="Id" /> <OrgId> <Id> <xsl:value-of select="$Id"/> </Id> </OrgId> </xsl:template> </xsl:stylesheet> 但这会生成以下 XML,该 XML 无法针对第 3 方 XSD 进行验证 <?xml version="1.0" encoding="utf-8"?> <Root xmlns="http://a.example.com"> <Header xmlns="http://b.example.com"> <Fr> <OrgId xmlns=""> <Id>hello</Id> </OrgId> </Fr> <To> <OrgId xmlns=""> <Id>goodbye</Id> </OrgId> </To> </Header> </Root> 问题是 OrgId xmlns=""。 为什么默认命名空间被显式重置? 我提出的针对 XSD 进行验证的解决方案如下: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <Root xmlns="http://a.example.com"> <Header xmlns="http://b.example.com"> <Fr> <xsl:apply-templates select="/Trades"> <xsl:with-param name="Id">hellox</xsl:with-param> <xsl:with-param name="namespace">http://b.example.com</xsl:with-param> </xsl:apply-templates> </Fr> <To> <xsl:apply-templates select="/Trades"> <xsl:with-param name="Id">goodbye</xsl:with-param> <xsl:with-param name="namespace">http://b.example.com</xsl:with-param> </xsl:apply-templates> </To> </Header> </Root> </xsl:template> <xsl:template match="/Trades"> <xsl:param name="Id" /> <xsl:param name="namespace" /> <xsl:element name="a:OrgId" namespace="{$namespace}"> <xsl:element name="a:Id" namespace="{$namespace}"> <xsl:value-of select="$Id"/> </xsl:element> </xsl:element> </xsl:template> </xsl:stylesheet> 这会生成一个 XML 文档: <?xml version="1.0" encoding="utf-8"?> <Root xmlns="http://a.example.com"> <Header xmlns="http://b.example.com"> <Fr> <a:OrgId xmlns:a="http://b.example.com"> <a:Id>hellox</a:Id> </a:OrgId> </Fr> <To> <a:OrgId xmlns:a="http://b.example.com"> <a:Id>goodbye</a:Id> </a:OrgId> </To> </Header> </Root> 这是可以接受的,因为它针对 XSD 进行验证,但必须将命名空间传递给模板,并且模板中的所有子元素都需要具有前缀命名空间,这感觉不必要的复杂。 看看这是否适合你(我无法在没有 inout 的情况下测试它): <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://b.example.com"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <Root xmlns="http://a.example.com"> <Header xmlns="http://b.example.com"> <Fr> <xsl:apply-templates select="/Trades"> <xsl:with-param name="Id">hello</xsl:with-param> </xsl:apply-templates> </Fr> <To> <xsl:apply-templates select="/Trades"> <xsl:with-param name="Id">goodbye</xsl:with-param> </xsl:apply-templates> </To> </Header> </Root> </xsl:template> <xsl:template match="/Trades"> <xsl:param name="Id" /> <OrgId> <Id> <xsl:value-of select="$Id"/> </Id> </OrgId> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

从 xml 中删除命名空间

下面是我试图将其转换为另一个没有命名空间的 xml 的输入 XML。我尝试删除命名空间,但它不起作用。下面提供了请求所需的所有详细信息。

回答 1 投票 0

复制 XML 并比较节点 ID,如果不匹配,则不复制节点

测试以下 XSLT 时出现错误消息。 测试以下 XSLT 时出现错误消息。 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge" xmlns:n0="http://sap.com/xi/SAPGlobal20/Global"> <!-- Definiere Variablen --> <xsl:variable name="ItemID" select="/multimap:Messages/multimap:Message1/n0:ServiceRequestFollowUpDocumentReplicationRequest/ServiceRequestFollowUpDocumentReplicateRequestMessage/ServiceRequest/Item/ID"/> <xsl:variable name="ServiceRequestItemID" select="/multimap:Messages/multimap:Message4/multimap:ServiceRequestItem"/> <!-- Kopiere das gesamte Dokument --> <xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <!-- Überspringe ServiceRequestItem, deren ID nicht im ServiceRequest-Element ist --> <xsl:template match="multimap:ServiceRequestItem[not(ID = $ItemID)]"/> </xsl:stylesheet> 这是我的 XML: <multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge"> <multimap:Message1> <n0:ServiceRequestFollowUpDocumentReplicationRequest xmlns:n0="http://sap.com/xi/SAPGlobal20/Global" xmlns:prx="urn:sap.com:proxy:LV9"> <ServiceRequestFollowUpDocumentReplicateRequestMessage> <ServiceRequest actionCode="01" itemListCompleteTransmissionIndicator="true"> <Item actionCode="01"> <ID>10</ID> </Item> <Item actionCode="01"> <ID>80</ID> </Item> </ServiceRequest> </ServiceRequestFollowUpDocumentReplicateRequestMessage> </n0:ServiceRequestFollowUpDocumentReplicationRequest> </multimap:Message1> <multimap:Message4> <ServiceRequestItemCollection> <ServiceRequestItem> <ID>10</ID> </ServiceRequestItem> <ServiceRequestItem> <ID>80</ID> </ServiceRequestItem> <ServiceRequestItem> <ID>30</ID> </ServiceRequestItem> </ServiceRequestItemCollection> </multimap:Message4> </multimap:Messages> 我想要 XML 的副本,但只有当 ID 也包含在 ServiceRequestItem 节点中时,才应复制 Item 中的节点。 您收到错误,因为在 XSLT 1.0 中,匹配模式无法引用变量。 您可以通过以下方式优雅而有效地避免这种情况: XSLT 1.0 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge" xmlns:n0="http://sap.com/xi/SAPGlobal20/Global"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="keepItems" match="n0:ServiceRequestFollowUpDocumentReplicationRequest/ServiceRequestFollowUpDocumentReplicateRequestMessage/ServiceRequest/Item" use="ID" /> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- Überspringe ServiceRequestItem, deren ID nicht im ServiceRequest-Element ist --> <xsl:template match="ServiceRequestItem[not(key('keepItems', ID))]"/> </xsl:stylesheet>

回答 1 投票 0

慕尼黑分组/求和完成后如何创建总计摘要

我一直在尝试找出如何使用 Muenchian 分组对分组和求和值进行总计,但无济于事。 这是我的分组键: 我一直在尝试找出如何使用 Muenchian 分组对分组和求和值进行总计,但无济于事。 这是我的分组键: <xsl:key name="kRcdGroup" match="Export/Record" use="concat(generate-id(..), AccountNo, Description, vb:GetOverrideCode(DeptOverride,LedgerCode))"/> vb 函数仅返回传递给它的两个值中的一个或另一个。 我创建了这个变量作为求和媒介: <xsl:variable name="vkeyGroup" select="key('kRcdGroup', concat(generate-id(..), AccountNo, Description, vb:GetOverrideCode(DeptOverride,LedgerCode))) "/> 这是一个管道分隔的文本输出,我正在 for-each 循环中进行求和: <xsl:for-each select="Export/Record[generate-id() = generate-id(key('kRcdGroup',concat(generate-id(..), AccountNo, Description, vb:GetOverrideCode(DeptOverride,LedgerCode)))[1])] "> 到目前为止,输出工作正常。但是,客户端要求添加页脚。他们想要所有这些分组/求和值的摘要。 此输出用于将数据上传到数据库,因此它必须采用这种荒谬的格式。 01 是页眉,02 是详细输出,99 是页脚。 (注意:页眉之后或页脚之前不应该有空行,我必须这样做才能更具可读性。) 01|CA|付款2082027|| 02|1|1|||23|0736|0704010000|0736131554|PAYR||||0|0704010000||||V0|13864.08|CAD||||CAN Flex CASH_0001|||CP||||| CAN Flex 现金||40|0736|0736131554|||||||||||||||||||||||||||||||||| 02|1|2|||23|0736|0701000000|0736131554|PAYR||||0|0701000000||||V0|149480.33|CAD||||CAN奖金_0002|||CP|||||CAN奖金||40|0736|0736131554||||||||||||||||||||||||||||||||| 02|1|3|||23|0736|0700793000|0736131554|PAYR||||0|0700793000||||V0|74941.42|CAD||||CAN TXB RRSP_0003|||CP|||||CAN TXB RRSP||40|0736|0736131554||||||||||||||||||||||||||||||||| 99|238285.83 这里是 xml 的几个节点: <Export> <Record> <AccountNo><![CDATA[0700103000]]></AccountNo> <Onsite></Onsite> <Amount> 47916.63</Amount> <PayDate>15062023</PayDate> <PayDateCA>06152023</PayDateCA> <PPStartDate>20230601</PPStartDate> <PPEndDate>06/15/2023</PPEndDate> <PPEndDateCA>20230615</PPEndDateCA> <Description><![CDATA[CAN Regular ]]></Description> <Category>Earning</Category> <Desc><![CDATA[CAN Regular]]></Desc> <EmpNumber>6001237</EmpNumber> <EmpFirstName><![CDATA[Elia]]></EmpFirstName> <EmpLastName><![CDATA[DiLoreto]]></EmpLastName> <DeptName>0736131554</DeptName> <DeptLedgerCode></DeptLedgerCode> <OnSiteName><![CDATA[0736131554 - Toronto Office - 0736]]></OnSiteName> <SiteCode><![CDATA[]]></SiteCode> <DeptOverride></DeptOverride> <LedgerCode><![CDATA[0736131554]]></LedgerCode> <Constant1>ERN</Constant1> <Constant2></Constant2> <Constant3></Constant3> <Constant4></Constant4> <Constant5></Constant5> <Filler1><![CDATA[ ]]></Filler1> <Filler2><![CDATA[ ]]></Filler2> <LegalEntity>Deutsche Bank AG CA</LegalEntity> <EmpType>FT</EmpType> </Record> <Record> <AccountNo><![CDATA[0700793000]]></AccountNo> <Onsite></Onsite> <Amount> 8833.12</Amount> <PayDate>15062023</PayDate> <PayDateCA>06152023</PayDateCA> <PPStartDate>20230601</PPStartDate> <PPEndDate>06/15/2023</PPEndDate> <PPEndDateCA>20230615</PPEndDateCA> <Description><![CDATA[CAN TXB RRSP ]]></Description> <Category>Earning</Category> <Desc><![CDATA[CAN TXB RRSP]]></Desc> <EmpNumber>6001237</EmpNumber> <EmpFirstName><![CDATA[Elia]]></EmpFirstName> <EmpLastName><![CDATA[DiLoreto]]></EmpLastName> <DeptName>0736131554</DeptName> <DeptLedgerCode></DeptLedgerCode> <OnSiteName><![CDATA[0736131554 - Toronto Office - 0736]]></OnSiteName> <SiteCode><![CDATA[]]></SiteCode> <DeptOverride></DeptOverride> <LedgerCode><![CDATA[0736131554]]></LedgerCode> <Constant1>MEM</Constant1> <Constant2></Constant2> <Constant3></Constant3> <Constant4></Constant4> <Constant5></Constant5> <Filler1><![CDATA[ ]]></Filler1> <Filler2><![CDATA[ ]]></Filler2> <LegalEntity>Deutsche Bank AG CA</LegalEntity> <EmpType>FT</EmpType> </Record> </Export> for-each 循环中的 Amount 值将其绝对值与指示符号的 neg (40) 或 pos (50) 标志相加。 <xsl:choose> <xsl:when test="sum($vkeyGroup/Amount) > 0"> <xsl:value-of select="format-number(sum($vkeyGroup/Amount),'#.00')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="format-number(sum($vkeyGroup/Amount)*-1,'#.00')"/> </xsl:otherwise> </xsl:choose> 我尝试创建第二个键来按支付日期汇总货币值,该值在每条记录上都相同,但由于货币值可能是正值或负值,因此在按支付日期分组时,其总和会有所不同。我需要能够总结 Amount 字段的绝对值,以便它与 for-each 循环中的值的总和相匹配。 我联系了 Jeni Tennison,但还没有收到回复——我正面临着解决这个问题的压力。任何帮助/示例将不胜感激。我正在通过你们的帮助学习,但我还有很长的路要走。接下来,我需要了解如何使用模板:)。 非常感谢,格雷格 我仍然在努力理解这里需要应用的逻辑是什么。 也许这个简化的示例可以有所帮助: XML <entries> <entry> <group>A</group> <amount>-50</amount> </entry> <entry> <group>A</group> <amount>25</amount> </entry> <entry> <group>B</group> <amount>80</amount> </entry> <entry> <group>B</group> <amount>-20</amount> </entry> <entry> <group>C</group> <amount>15</amount> </entry> </entries> XSLT 1.0 + EXSLT node-set() 扩展函数 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:key name="entry-by-group" match="entry" use="group" /> <xsl:template match="/entries"> <!-- first pass --> <xsl:variable name="subtotals"> <xsl:for-each select="entry[count(. | key('entry-by-group', group)[1]) = 1]"> <subtotal group="{group}"> <xsl:variable name="subtotal" select="sum(key('entry-by-group', group)/amount)"/> <!-- output absolute value --> <xsl:value-of select="translate($subtotal, '-', '')"/> </subtotal> </xsl:for-each> </xsl:variable> <!-- final output --> <output> <xsl:copy-of select="$subtotals"/> <total> <xsl:value-of select="sum(exsl:node-set($subtotals)/subtotal)"/> </total> </output> </xsl:template> </xsl:stylesheet> 结果 <?xml version="1.0" encoding="UTF-8"?> <output> <subtotal group="A">25</subtotal> <subtotal group="B">60</subtotal> <subtotal group="C">15</subtotal> <total>100</total> </output> 这似乎遵循您描述的过程,尽管我不明白这有什么用处。

回答 1 投票 0

如何在xsl翻译中有多个“替换”特殊字符

如何用斜杠替换字符串上的所有破折号和点?我尝试使用下面的代码。 我也尝试过使用...

回答 2 投票 0

如何在 XSLT XPath 表达式中使用变量?

如何将变量传递给 XSLT XPath。例如 如何将变量传递给 XSLT XPath。例如 <ns0:UnitCode> <xsl:value-of select="//ns1:Root/InputMessagePart_1/ ns2:ServiceMasterDetailsResponse/ ns2:ServiceMasterDetailResponse[$Counter]/ ns2:BASE_UOM/text()"/> </ns0:UnitCode> 其中 Counter 是我的 XSLT 变量。 我想将变量计数器的数值传递给上面的 XSLT XPath 表达式。 如何在 XSLT 中使用变量引用 XPath 在 select 属性中,使用 $var (如您所做的那样): <xsl:value-of select="/path/to/element[@id=$var]"/> 以下是在 XSLT 中使用变量引用的一些其他方法... 匹配图案 XSLT 1.0:不允许变量match: match属性的值包含a是错误的 VariableReference. XSLT 2.0:变量允许出现在match谓词或中 模式可能以 id FO 或关键函数调用开始, 前提是要匹配的值以文字形式提供 或对变量或参数的引用,以及键名(在 key 函数的大小写)作为字符串文字提供。这些 模式永远不会匹配根不是树中的节点 文档节点。 XSLT 2.0 匹配谓词变量示例: <xsl:variable name="globalVar" select="'value'"/> <xsl:template match="abc[. = $globalVar]"> 文字结果元素 在文字结果元素中,使用属性值模板: <img src="{$var}/image.jpg"/> 元素或属性名称 在元素或属性名称中,使用 xsl:element 或 xsl:attribute 以及属性值模板: <xsl:element name="{$var}">content</xsl:element> 或 <xsl:attribute name="{$var}">content</xsl:attribute>

回答 1 投票 0

如何将变量传递给 XSLT XPath 表达式?

如何将变量传递给 XSLT XPath。例如 如何将变量传递给 XSLT XPath。例如 <ns0:UnitCode> <xsl:value-of select="//ns1:Root/InputMessagePart_1/ ns2:ServiceMasterDetailsResponse/ ns2:ServiceMasterDetailResponse[$Counter]/ ns2:BASE_UOM/text()"/> </ns0:UnitCode> 其中 Counter 是我的 XSLT 变量。 我想将变量计数器的数值传递给上面的 XSLT XPath 表达式。 如何在 XSLT 中使用变量引用 XPath 在 select 属性中,使用 $var (如您所做的那样): <xsl:value-of select="/path/to/element[@id=$var]"/> 以下是在 XSLT 中使用变量引用的一些其他方法... 匹配图案 XSLT 1.0:不允许变量match: match属性的值包含a是错误的 VariableReference。 XSLT 2.0:变量允许出现在match谓词或中 模式可能以 id FO 或关键函数调用开始, 前提是要匹配的值以文字形式提供 或对变量或参数的引用,以及键名(在 key 函数的大小写)作为字符串文字提供。这些 模式永远不会匹配根不是树中的节点 文档节点。 XSLT 2.0 匹配谓词变量示例: <xsl:variable name="globalVar" select="'value'"/> <xsl:template match="abc[. = $globalVar]"> 文字结果元素 在文字结果元素中,使用属性值模板: <img src="{$var}/image.jpg"/> 元素或属性名称 在元素或属性名称中,使用 xsl:element 或 xsl:attribute 以及属性值模板: <xsl:element name="{$var}">content</xsl:element> 或 <xsl:attribute name="{$var}">content</xsl:attribute>

回答 1 投票 0

xslt:键与 contains(text(),

我必须使用 xslt 1.0 并且我有以下 xml: 短 客户端、运行时、语言 <

回答 1 投票 0

如何在XPath-1.0中进行集合运算?

我在 SO 和其他地方看到以下内容应该有效(这个示例直接来自 O'Reilly 的 XSLT Cookbook): (:交叉点:) $set1[计数(. | $set2) = 计数($set2)] (:

回答 2 投票 0

xsl:元素不想接受来自属性值的字符串

我正在尝试将元素属性值转换为标签(名称)。例如,一个 到一个 。神秘的是,这根本不可能发生,我明白......

回答 1 投票 0

XML 未按 XSLT 中的预期形成

我正在使用以下 XSLT 来形成 XML,并且代码工作正常,但我希望将此代码包装在一个条件下。 在下面的 XML 中,因为 S_HL/D_735='T' 只出现一次,这就是我

回答 1 投票 0

需要在 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> 我无法方便地访问(据我所知)Xalan,它似乎是您正在使用的 XSLT 处理器。所以我无法测试有关您问题根源的任何猜想。 但是,如果在第一个(也是唯一的)xsl:comment之前放置像xsl:param这样的输出指令是正确的,我会大吃一惊。 (令我惊讶的是,您没有报告来自样式表编译器的任何错误消息。但是从您引用的错误消息中可以清楚地看出,Xalan 尚未成功编译该函数。)尚不清楚您想要通过让函数来完成什么返回注释节点和字符串值“10|10”,但这可能不是实现它的方法。 假设 xsl:comment 指令试图验证该函数实际上已被评估,我会尝试类似的事情 <func:function name="my:calXY"> <xsl:param name="string1" select="''"/> <func:result select="concat(10,'|',10)" /> </ [在这个答案的早期版本中,我推测这里不需要 func:result;我的错误。看来确实需要。] 您要求提供完整的样式表。使用 xsltproc 运行时,以下样式表按预期运行。 (正如我上面指出的,我没有便捷的方法来运行 Xalan。) <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:func="http://exslt.org/functions" xmlns:my="http://example.org/my" exclude-result-prefixes="my" extension-element-prefixes="func"> <xsl:output indent="yes" method="xml" /> <xsl:template match="/"> <xsl:message>Result is <xsl:value-of select="my:dummy('foo')"/></xsl:message> <output> <test><xsl:value-of select="my:dummy('bar')"/></test> <test><xsl:value-of select="my:dummy('baz')"/></test> </output> </xsl:template> <func:function name="my:dummy"> <xsl:param name="s" select="'foo'"/> <func:result select="concat($s,'|',$s)" /> </func:function> </xsl:stylesheet>

回答 1 投票 0

我想删除元素之间的所有回车符和换行符。我正在使用 Microsoft Visual Studio。所以,这是一个1.0问题

输入XML: 第一 输入XML: <?xml version="1.0" encoding="utf-8"?> <section> <table> <tbody> <tr> <td> <datapoint>First</datapoint> </td> </tr> <tr> <td> <datapoint>Second</datapoint> </td> </tr> </tbody> </table> </section> 这是我尝试过的: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxml="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxml xsl"> <xsl:strip-space elements="*" /> <xsl:preserve-space elements="datapoint" /> <xsl:output indent="yes" method="xml" version="1.0" omit-xml-declaration="no"/> <xsl:template match="text()[contains(.,'&#10;') or contains(.,'&#13;')]"/> <!-- Identity template --> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 这就是我所期待的: 预期结果:(一行) <?xml version="1.0" encoding="utf-8"?><section><table><tbody><tr><td><datapoint>First</datapoint></td></tr><tr><td><datapoint>Second</datapoint></td></tr></tbody></table></section> 实际结果:(无变化) <?xml version="1.0" encoding="utf-8"?> <section> <table> <tbody> <tr> <td> <datapoint>First</datapoint> </td> </tr> <tr> <td> <datapoint>Second</datapoint> </td> </tr> </tbody> </table> </section> 我想知道我是否要删除换行符和回车符,但 VS 正在将它们放回原处。 怎么样: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/> <xsl:strip-space elements="*"/> <!-- identity transform --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.