以下是一些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!
答案 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>
谢谢你!