Biztalk错误?全局(引用)时在元素名称中使用连字符或句点时XSD会发生扼流

时间:2012-07-13 16:06:54

标签: .net xsd biztalk

以下是一些XSD的代码,它在XML Spy中是VALID,但在Biztalk中使用句点或连字符对引用的元素进行扼流。任何人都可以告诉我,如果我做错了什么,或确认这是一个错误或“功能?”有没有人有解决方法?我在谷歌(和BizTalk)的XSD / XML验证中搜索和搜索异常,并且没有看到任何东西(任何有类似问题或问题的人)。

   <?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2012 rel. 2 (x64) (http://www.altova.com) by ZiggyDude (PA DPW-BIS) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="DotNetRestrictions">
        <xs:complexType>
            <xs:choice>
                <xs:element name="Valid">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Embedded-Hyphen"/>
                            <xs:element name="Embedded.Period"/>
                            <xs:element name="Embedded_Underscore"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Invalid">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="Embedded-Hyphen"/>
                            <xs:element ref="Embedded.Period"/>
                            <xs:element ref="Embedded_Underscore"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
        </xs:complexType>
    </xs:element>
    <xs:element name="Embedded.Period"/>
    <xs:element name="Embedded-Hyphen"/>
    <xs:element name="Embedded_Underscore"/>
</xs:schema>

请注意嵌入式下划线不会在.NET中失败。通过将所有句点和连字符更改为下划线来实现此功能,但发送代理商不会以“下划线”格式提供XML或XSD。文件会出现在太多带有句点和连字符的地方。我们要么需要1)正确配置,以便在可能的情况下工作,2)修复BizTalk和.NET(heh.heh.heh)或3)动态转换这些XML文档,以便在处理之前替换句点和连字符。 / p>

思考?请确认/争议我的理论,当元素被称为参考时,BizTalk / .NET会对这些字符进行扼杀。

TIA!

2 个答案:

答案 0 :(得分:2)

如果BizTalk“窒息”的症状是你在这些方面遇到错误:

  

节点“Embedded.Period” - 为此根指定有效的.NET类型名称   节点

然后,您可以通过在BizTalk架构编辑器中选择有问题的节点并修改其Rootnode TypeName属性来解决此问题。交换下划线的句点或连字符 - 这只会影响生成的.NET类型,而不会影响XML表示 - 并查看是否能解决您的问题。

答案 1 :(得分:0)

通过将“Rootnode TypeName属性”中的违规字符替换为下划线,XSD可以自行验证,并且能够接受元素名称中带有违规字符的传入XML。

代码是

<xsd:element name="Embedded-Hyphen" type="xsd:anyType"/>
<xsd:element name="Embedded_Underscore" type="xsd:anyType"/>
<xsd:element name="Embedded.Period" type="xsd:string"/>

将此添加到每个元素:

<xsd:annotation>
   <xsd:appinfo>
      <fieldInfo rootTypeName="Embedded_Period" xmlns="http://schemas.microsoft.com/BizTalk/2003"/>
    </xsd:appinfo>
</xsd:annotation>

现在看起来像这样:

<xsd:element name="Embedded-Hyphen" type="xsd:anyType">
    <xsd:annotation>
        <xsd:appinfo>
            <recordInfo rootTypeName="Embedded_Hyphen" xmlns="http://schemas.microsoft.com/BizTalk/2003"/>
        </xsd:appinfo>
    </xsd:annotation>
</xsd:element>
<xsd:element name="Embedded_Underscore" type="xsd:anyType"/>
<xsd:element name="Embedded.Period" type="xsd:string">
    <xsd:annotation>
        <xsd:appinfo>
            <fieldInfo rootTypeName="Embedded_Period" xmlns="http://schemas.microsoft.com/BizTalk/2003"/>
        </xsd:appinfo>
    </xsd:annotation>
</xsd:element>

谢谢你!