创建一个变量xsl

时间:2012-05-20 13:05:31

标签: xml xslt

早上好,如果有人知道它有助于通过xsl和xml创建变量

我有这个xml:

<!ELEMENT bdticketCardell (invoice, services, products) >
........
<!ELEMENT services (service+)>
<!ELEMENT service (nameService, quantityService, priceService)>
<!ELEMENT nameService (#PCDATA) >
<!ELEMENT quantityService (#PCDATA) >
<!ELEMENT priceService (#PCDATA) >
<!ATTLIST service idService ID #REQUIRED>

我想做=“”变量名=“grosspriceservice1”select =“// quantityService [@idService =”s1“] * // priceService [@idService =”s1“] /&gt;”“

非常感谢

2 个答案:

答案 0 :(得分:0)

你的问题不明确 请提供XML示例以获得清晰且更好的答案。
当您拥有DTD时,您可以生成任何通用XML样本文件,而无需合理的数据但结构正确。

答案 1 :(得分:0)

您的问题不是很清楚,但我的猜测是您希望将价格乘以@id等于“s1”的服务数量,并将该结果放入变量中。

如果是这样,你可以写:

<xsl:variable name="grosspriceservice1" 
  select="/services/service[@idService='s1']/quantityService * /services/service[@idService='s1']/priceService"/>

或者,如果您的解析器处理DTD ID(在大多数情况下应该为真):

<xsl:variable name="grosspriceservice1" 
  select="id('s1')/quantityService * id('s1')/priceService"/>

(当然,您也可以使用变量来存储id为s1的服务)

@id属性不在quantityServicepriceService下,而是在他们的共同父母之下,并且是您提出的最接近的解决方案:

<xsl:variable name="grosspriceservice1" 
  select="//quantityService[../@id='s1'] * //priceService[../@idService = "s1"]"/>

但这比我上面提到的两个选项效率低得多,因为处理器必须扫描整个文档两次以执行此操作。