XSLT:Xpath用于计算属性值与另一个特定兄弟相匹配的项目

时间:2017-03-31 09:18:03

标签: xslt xpath count

我有以下(简化;有更多属性行)XML文件,我需要通过XSLT处理:

<Collection Name="Columns" Type="OutputColumn">
<SubRecord>
    <Property Name="Name">SID</Property>
    <Property Name="SqlType">BigInt</Property>
    <Property Name="Derivation">inputstream1.SID</Property>
    <Property Name="Description">Main key</Property>
</SubRecord>
<SubRecord>
    <Property Name="Name">name</Property>
    <Property Name="SqlType">Char</Property>
    <Property Name="Derivation">inputstream2.name</Property>
    <Property Name="Description">Surname</Property>
</SubRecord>
    <SubRecord>
    <Property Name="Name">street</Property>
    <Property Name="SqlType">Char</Property>
    <Property Name="Derivation">inputstream1.streetname + inputstream1.number</Property>
    <Property Name="Description">Full street</Property>
</SubRecord></Collection>

我现在需要知道两件事作为XSLT中的变量来决定在if-Condition中要做什么:

  1. 至少有一个SubRecord,其中substring-after(Derivation,&#39;。&#39;)匹配兄弟属性&#34; Name&#34; (就像在前两个SubRecords中一样)?
  2. 至少有一个SubRecord,其中substring-after(Derivation,&#39;。&#39;)与兄弟Property&#34; Name&#34; (就像在第三个SubRecord中一样)?
  3. 我尝试使用带有Count() - 功能的Xpath执行此操作,但只是无法弄清楚如何使用&#34; Name&#34;与兄弟属性节点进行比较。因为它的名字......如果你知道Count()的另一种选择,我也会对其他想法持开放态度。

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解这个问题,所以请查看以下内容并告诉我它是否不是您真正想要的

首先可以使用以下XPath

完成
boolean(//SubRecord[substring-after(./Property[@Name="Derivation"]/text(), '.')=./Property[@Name="Name"]/text()])

这应返回true,因为XPath会匹配前两个SubRecord元素。

使用not()应该允许返回true,因为XPath与第三个SubRecord元素匹配:

boolean(//SubRecord[not(substring-after(./Property[@Name="Derivation"]/text(), '.')=./Property[@Name="Name"]/text())])