如果使用 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
指令。
我有以下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
指令。