Xsd XML文档中的节点

Xsd XML文档中的节点,xsd,biztalk,Xsd,Biztalk,我设计了一个xml模式来解析传入的xml文档。接收位置从2个提要获取xml文档,其中一个提要将文档中的一个节点拼错了,“Roookie”而不是“Rookie”,有没有办法让我现有的xsd解析此文档?您需要替换文档中的元素或修改xsd以使用新的文档格式。只需修改您的模式,以接受2个节点(Rookie或Rookie)之间的选择,而不只是一个名为Rookie的节点。两个节点的类型相同。 当然,如果Roo(o)kie有一个复杂的内容,您需要为该内容声明一个复杂的类型,以避免重复这两个元素的整个结构。您可

我设计了一个xml模式来解析传入的xml文档。接收位置从2个提要获取xml文档,其中一个提要将文档中的一个节点拼错了,“Roookie”而不是“Rookie”,有没有办法让我现有的xsd解析此文档?

您需要替换文档中的元素或修改xsd以使用新的文档格式。

只需修改您的模式,以接受2个节点(Rookie或Rookie)之间的选择,而不只是一个名为Rookie的节点。两个节点的类型相同。
当然,如果Roo(o)kie有一个复杂的内容,您需要为该内容声明一个复杂的类型,以避免重复这两个元素的整个结构。

您可能会预处理错误的XML文件,如使用以下简单的XSL样式表:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="no"/>

<xsl:template match="Roookie">
        <Rookie>
                <xsl:apply-templates select="@*|node()" />
        </Rookie>
</xsl:template>

<xsl:template match="@*|node()" name="defaultRule">
        <xsl:copy>
                <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
</xsl:template>

</xsl:stylesheet>


这里唯一的答案是修改坏消息。xsd是一个合同,应该通过提交系统来遵守。如果您对提交系统没有这种控制,我建议使用新名称创建第二个模式,并使其适应拼写错误。如果您开始更改您的合同/xsd,则消息中的每一个错误都会增加复杂性并降低可维护性。

Serge的选择方法正是我即将发布的方法。对提交的文档进行任何类型的预处理通常都会带来麻烦。不过,我还是建议退一步——你的模式定义了你的应用程序接口,如果可能的话,你应该要求人们遵守它。@David Hall——我已经向我的经理解释了这一点,但我被告知不要为这些琐碎的更改“担心”客户,而要“处理它”:-)我认为新秀的模板匹配实际上应该是新秀,以抓住不好的元素。正确吗?我在模式中将另一个元素声明为“Roookie”。有一个自定义函数,用于检查两个节点的输入,并返回具有该值的节点,因为其中一个节点将始终存在于文档中。。。这将对meThis起作用,这意味着他的所有代码都需要通过特殊处理来“污染”以支持这两个节点。我认为最好在map/xslt中对输入进行一次“规范化”,然后在其他地方简单地使用规范化表示。