我有以下(简化;有更多属性行)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中要做什么:
我尝试使用带有Count() - 功能的Xpath执行此操作,但只是无法弄清楚如何使用&#34; Name&#34;与兄弟属性节点进行比较。因为它的名字......如果你知道Count()的另一种选择,我也会对其他想法持开放态度。
答案 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())])