Xml 如果属性或元素不存在,是否有方法使XSLT抛出错误?
当我试图访问源XML中不存在的属性(或元素)时,我正在寻找一种使XSLT抛出错误的简单方法。 目前我要做的是首先检查属性是否存在,如果不存在则手动抛出错误-例如:Xml 如果属性或元素不存在,是否有方法使XSLT抛出错误?,xml,xslt,Xml,Xslt,当我试图访问源XML中不存在的属性(或元素)时,我正在寻找一种使XSLT抛出错误的简单方法。 目前我要做的是首先检查属性是否存在,如果不存在则手动抛出错误-例如: 错误消息 我发现有很多代码需要检查一个属性——特别是如果你对所有属性都这样做的话。 在XSLT中是否有其他方法可以做到这一点?例如,通过设置“对不存在的属性中止”之类的指令 我知道一种方法是使用DTD或Schema,如果没有直接的XSLT方法,我会这样做 非常感谢 XSLT1.0基于匹配节点的模板,因此可以编写一个模板来匹配没有
错误消息
我发现有很多代码需要检查一个属性——特别是如果你对所有属性都这样做的话。
在XSLT中是否有其他方法可以做到这一点?例如,通过设置“对不存在的属性中止”之类的指令
我知道一种方法是使用DTD或Schema,如果没有直接的XSLT方法,我会这样做
非常感谢 XSLT1.0基于匹配节点的模板,因此可以编写一个模板来匹配没有特定属性的所有元素
<xsl:template match="*[not(@id)]">
<xsl:message terminate="yes">
<xsl:value-of select="concat('Attribute @id does not exist in element ', name())" />
</xsl:message>
</xsl:template>
例如,以下模板将匹配所有元素,例如没有@id属性的元素
<xsl:template match="*[not(@id)]">
<xsl:message terminate="yes">
<xsl:value-of select="concat('Attribute @id does not exist in element ', name())" />
</xsl:message>
</xsl:template>
因此,如果您想强制某些元素具有特定属性,您可以在匹配表达式中使用类似于:Element[not(@id)]| Element2[not(@a)]等的内容,然后为每个元素编写不同的模板来处理它们,以防它们具有这些属性:
<xsl:template match="Element[not(@id)]|Element2[not(@a)]">
<!-- Throw error message -->
</xsl:template>
<xsl:template match="Element">
<!-- Process Elements which have an @id attribute -->
</xsl:template>
<xsl:template match="Element2">
<!-- Process Elements which have an @a attribute -->
</xsl:template>
当某些元素具有某些属性(如“having a attribute”、“属性值无效”、“子元素数为5”等)时,您可以编写所需的复杂模板(应该不是很复杂)来抛出错误
希望这能让您了解如何以一种通用的方式实现您想要实现的目标。XSLT 1.0基于匹配节点的模板,因此您可以编写一个模板来匹配所有没有特定属性的元素
<xsl:template match="*[not(@id)]">
<xsl:message terminate="yes">
<xsl:value-of select="concat('Attribute @id does not exist in element ', name())" />
</xsl:message>
</xsl:template>
例如,以下模板将匹配所有元素,例如没有@id属性的元素
<xsl:template match="*[not(@id)]">
<xsl:message terminate="yes">
<xsl:value-of select="concat('Attribute @id does not exist in element ', name())" />
</xsl:message>
</xsl:template>
因此,如果您想强制某些元素具有特定属性,您可以在匹配表达式中使用类似于:Element[not(@id)]| Element2[not(@a)]等的内容,然后为每个元素编写不同的模板来处理它们,以防它们具有这些属性:
<xsl:template match="Element[not(@id)]|Element2[not(@a)]">
<!-- Throw error message -->
</xsl:template>
<xsl:template match="Element">
<!-- Process Elements which have an @id attribute -->
</xsl:template>
<xsl:template match="Element2">
<!-- Process Elements which have an @a attribute -->
</xsl:template>
当某些元素具有某些属性(如“having a attribute”、“属性值无效”、“子元素数为5”等)时,您可以编写所需的复杂模板(应该不是很复杂)来抛出错误
希望这能让您了解如何以一种通用的方式实现您想要实现的目标。在XPath 2.0中,每当您想使用节点$N,如果节点不存在则失败时,只需在函数调用中将对$N的引用精确地包装为一个($N)或一个或多个($N)。在XPath 2.0中,每当您想要使用节点$N并且如果它不存在则失败时,只需在函数调用中将对$N的引用包装为一个($N)或一个或多个($N)