-1

早上好,如果有人知道它有助于通过 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>

我想做 = ""variable name="grosspriceservice1" select="//quantityService[@idService = "s1"] * //priceService[@idService = "s1"]/>""

非常感谢

4

2 回答 2

0

您的问题不清楚
,请提供 XML 示例以获得清晰和更好的答案。
由于您拥有 DTD,因此您可以生成任何通用 XML 示例文件,而无需合理数据但结构正确。

于 2012-05-20T18:42:11.727 回答
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"]"/>

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

于 2012-05-20T20:10:15.967 回答