3

这是 XSD 的一些代码,它在 XML Spy 中是有效的,但在 Biztalk 中使用句点或连字符在引用的元素上阻塞。谁能告诉我我做错了什么,或者确认这是错误还是“功能”?有人有解决方法吗?我在 .NET(和 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 文档以在处理之前替换句点和连字符。

想法?并且请确认/反驳我的理论,即当元素被称为参考时,BizTalk/.NET 会阻塞这些字符。

蒂亚!

4

2 回答 2

2

如果 BizTalk “窒息”的症状是您遇到以下错误:

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

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

于 2012-07-16T12:16:54.277 回答
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>

谢谢你们!

于 2012-07-23T14:13:55.357 回答