如果使用 XSLT 值为空,则测试多个标签

Test mutple tags if value is empty with XSLT

我有以下XML

<?xml version="1.0" encoding="utf-8"?>
<Subjects>
  <Subject>
    <Title>Mr</Title>
    <Firstname></Firstname>
    <Surname></Surname>
    <Email></Email>
    <Incidents>
      <Incident>
        <ReferenceNo>meuen</ReferenceNo>
      </Incident>
    </Incidents>
    <TelephoneNos />
    <Employers />
    <BankAccounts />
  </Subject>
  <Subject>
    <Title>Mr</Title>
    <Firstname>Test</Firstname>
    <Surname>Test</Surname>
    <Email>test@test.com</Email>
    <Incidents>
      <Incident>
        <ReferenceNo>jkcsdlkjsdl</ReferenceNo>
      </Incident>
    </Incidents>
    <TelephoneNos />
    <Employers />
    <BankAccounts />
  </Subject>
</Subjects>

我需要使用 XSLT 检查 ReferenceNo 字段是否为空

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://tempuri.org/">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="/">
        <Result xmlns="http://tempuri.org/">

            <xsl:for-each select="/Subjects/Subject">

                <xsl:variable name="output" select="Incidents/Incident/ReferenceNo"/>
                <xsl:choose>
                    <xsl:when test="string-length($output) > 0">
                        <Response>Y</Response>
                    </xsl:when>
                    <xsl:otherwise>
                        <Response>N</Response>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:for-each>

        </Result>
    </xsl:template>

</xsl:stylesheet>

但这只检查第一个节点,而不是两个或所有 ReferenceNo 标签。

我怎样才能达到这个结果。

我已经在 xsl:foeach 中尝试过了,这显然会在上面的实例中重复我的 tag1 和 tag2 节点两次 XML

我希望 response 如果其中一个标签被填充,则值为 Y,如果两个标签均未被填充,则值为 N

这是我当前收到的回复

<Result xmlns="http://tempuri.org/" xmlns:x="http://tempuri.org/">
   <Response>Y</Response>
   <Response>Y</Response>
</Result>

我不想Response重复

本次测试:

<xsl:when test="Subjects/Subject/Incidents/Incident/ReferenceNo[string-length() > 0]">

或者,如果您愿意:

<xsl:when test="Subjects/Subject/Incidents/Incident/ReferenceNo[text()]">

当至少有一个非空 ReferenceNo 元素时 return 为真。

可以(并且应该)从 / 根节点的上下文应用测试。不需要 xsl:for-each 指令。