【发布时间】:2016-06-18 16:36:37
【问题描述】:
在下面的 xml 结构中,如果记录类型为“ADD”,我需要使用 xsl 对每个记录类型的成本值求和
<records>
...irrelevant nodes...
<recordType>NO</recordType>
<recordType>ADD</recordType>
<recordType>ADD</recordType>
... irrelevant nodes...
<LdgCost>1</LdgCost>
<LabCostIn>2</LabCostIn>
<LabCostOut>3</LabCostOut>
<LdgCost>4</LdgCost>
<LabCostIn>5</LabCostIn>
<LabCostOut>6</LabCostOut>
<LdgCost>7</LdgCost>
<LabCostIn>8</LabCostIn>
<LabCostOut>9</LabCostOut>
...irrelevant nodes...
</records>
(记录类型的成本是与记录类型相同索引中的以下元素)。这意味着不需要添加类型为“NO”的第一个位置的recordType,因此它的值
<LdgCost>1</LdgCost>
<LabCostIn>2</LabCostIn>
<LabCostOut>3</LabCostOut>
不需要相加。但是,接下来的两种记录类型是“ADD”,因此我需要对
的值求和<LdgCost>4</LdgCost>
<LabCostIn>5</LabCostIn>
<LabCostOut>6</LabCostOut>
<LdgCost>7</LdgCost>
<LabCostIn>8</LabCostIn>
<LabCostOut>9</LabCostOut>
并将其设置为我的总数。输出只是一个总元素
<total>39</total>
如果使用父子节点,上述xml结构所代表的逻辑结构如下。
<records>
<record>
<recordType>NO</recordType>
<LdgCost>1</LdgCost>
<LabCostIn>2</LabCostIn>
<LabCostOut>3</LabCostOut>
</record>
<record>
<recordType>ADD</recordType>
<LdgCost>4</LdgCost>
<LabCostIn>5</LabCostIn>
<LabCostOut>6</LabCostOut>
</record>
<record>
<recordType>ADD</recordType>
<LdgCost>7</LdgCost>
<LabCostIn>8</LabCostIn>
<LabCostOut>9</LabCostOut>
</record>
</records>
但是,我必须根据兄弟元素的索引来建立父子关系,而不是使用这种结构。
我将手动执行此操作的方式如下:
找到第一个
<recordType>元素,检查值是ADD还是NO。由于值是 NO 我跳过这个。找到下一个
<recordType>元素,检查值是ADD还是NO。由于值是 ADD,所以我需要找到与第二条记录相关的 3 项成本。这些成本元素保证存在并位于与其记录类型对应的索引中。找到
<LdgCost>[2] 元素值并将其添加到总和中。 (索引是二,因为我们在第二个记录类型上,因为我们跳过了第一个并且它的成本被忽略了)找到
<LdgCostIn>[2] 元素值并将其添加到总和中。找到
<LdgCostOut>[2] 元素值并将其添加到总和中。现在我们已经将第二条记录中的三个成本加到总和中,我们继续第三个
<recordType>元素并检查它的值。由于值为 ADD,我们找到与第三条记录相关联的 3 个成本。找到
<LdgCost>[3] 元素值并将其添加到sum中。(索引为3,因为我们在第三个recordType)找到
<LdgCostIn>[3] 元素值并将其添加到总和中。找到
<LdgCostOut>[3] 元素值并将其添加到总和中。没有更多的
<recordType>元素需要处理,所以我们返回 39 的总和。
【问题讨论】:
-
我不明白你的解释。
-
每条记录都有一个类型和 3 个与之关联的成本。索引 1 处的记录类型为“NO”类型,因此索引 1 处的三个成本(LdgCost、LabCostIn、LabCostOut)不需要相加。索引 2 处的记录类型是“ADD”类型,因此需要将索引 2 处的三个成本相加。索引 3 处的记录类型和成本也是如此。本质上,我想做类似的事情:对于每个记录类型,如果类型是 ADD,那么将与当前记录类型相同的索引处的所有成本相加
-
您如何确定“记录”有 3 个成本,而不是 2 个或 5 个?
-
所以每条记录都有三个成本。 1,2,3 是第一个记录类型“NO”的一部分。 4,5,6 是第二个记录类型“ADD”的一部分。 7,8,9 是第三个记录类型“ADD”的一部分 每个记录类型都有三个成本(LdgCost,LabCostIn,LabCostOut)所以记录节点之后的前三个节点(值 1,2,3)是“孩子” (尽管它们没有父子结构)recordType NO 节点,它们代表第一条记录的成本。但是,节点类型为 NO,因此我们将它们从总和中排除。接下来的两种记录类型是 ADD,因此我们将它们的 3 个成本中的每一个都包括在总和中。
-
每条记录的成本始终相同。因此,如果 recordType 有两个元素,则会有 6 个成本(每条记录 3 个)。如果有一种记录类型,则将产生 3 种成本。等
标签: xml xslt sum xslt-1.0 xslt-2.0