XSLT:Xpath用于计算属性值与另一个特定同级匹配的项

XSLT:Xpath用于计算属性值与另一个特定同级匹配的项,xslt,xpath,count,Xslt,Xpath,Count,我有以下(简化;有更多的属性行)XML文件需要通过XSLT处理: <Collection Name="Columns" Type="OutputColumn"> <SubRecord> <Property Name="Name">SID</Property> <Property Name="SqlType">BigInt</Property> <Property Name="Derivation

我有以下(简化;有更多的属性行)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>

希德
比基特
inputstream1.SID
主键
名称
烧焦
inputstream2.name
姓
街道
烧焦
inputstream1.streetname+inputstream1.number
整条街
现在,我需要知道两件事作为XSLT中的变量,以决定在if条件下进一步做什么:

  • 是否至少有一个子记录(派生“.”)后的子字符串与同级属性“Name”匹配(与前两个子记录类似)
  • 是否至少有一个子记录(派生“.”)后的子字符串与同级属性“Name”不匹配(与第三个子记录类似)

  • 我试图通过Xpath和Count()功能来实现这一点,但就是想不出如何与名为“Name”的同级属性节点进行比较……如果您知道Count()的替代方法,我也愿意接受其他想法。

    我不确定我是否完全理解这个问题,所以,检查下面,让我知道,如果它不是你真正想要的

    首先可以使用下面的
    XPath

    boolean(//SubRecord[substring-after(./Property[@Name="Derivation"]/text(), '.')=./Property[@Name="Name"]/text()])
    
    这应该返回
    true
    ,因为
    XPath
    匹配前两个
    子记录
    元素

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

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

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

    首先可以使用下面的
    XPath

    boolean(//SubRecord[substring-after(./Property[@Name="Derivation"]/text(), '.')=./Property[@Name="Name"]/text()])
    
    这应该返回
    true
    ,因为
    XPath
    匹配前两个
    子记录
    元素

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

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

    非常感谢,这正是我所需要的!非常感谢,这正是我所需要的!您需要说明这是XSLT1.0、2.0还是3.0。它会影响答案,您需要说明这是XSLT1.0、2.0还是3.0。这会影响答案。