我正在写的软件,从我们的客户接受XML。 该XML HAS2部分,标准的一部分,它包含的字段集,以及自由一部分,使我们的客户能够添加自己的自己的XML
<OverallDocument>
<SetFields>
<name>Jon Doe</name>
<age>24</age>
<sex>M</sex>
</SetFields>
<FreeXML>
<!--custom xml goes here-->
</FreeXML>
</OverallDocument>
该系统设定,使得OverallDocument具有覆盖XML的所有部分,除了FreeXML标签内所发生的模式。 在FreeXML标签的内容有它的由我们客户端发送到我们自己的模式。
<OverallDocument>
<SetFields>
<name>Jane Doe</name>
<age>30</age>
<sex>F</sex>
</SetFields>
<FreeXML>
<Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</Custom1>
</FreeXML>
</OverallDocument>
在这种情况下,客户端的XML看起来是这样的
<Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</Custom1>
该计划试图提取作进一步处理客户的自定义XML。
到目前为止,没有任何问题。 这一切都很好地读取到XmlDocument。 不幸的是我们的一些客户使用命名空间前缀他们的自定义XML没有在XML文档中声明的前缀。
<OverallDocument>
<SetFields>
<name>Jane Doe</name>
<age>30</age>
<sex>F</sex>
</SetFields>
<FreeXML>
<hl:Custom1>
<CustomString>aaaaaa</CustomString>
<CustomInt>12345</CustomInt>
</hl:Custom1>
</FreeXML>
</OverallDocument>
这导致的XmlDocument翻倒作为前缀不是在XML声明。 我试图让周围这个从代码中删除所有的命名空间前缀,但是这后来导致在处理问题作为客户的模式要求的前缀是标签上的。
一些进一步的问题
- 我们有不同的模式和不同的命名空间的许多客户。
- 每个XML文件可以在不同的部分多FreeXML元素(所以它不可能简单地提取FreeXML部分为不同的客户端使用1或更多,并使用在不同位置的部分在整个文档。
- 我们不能修改客户端的架构。
- 我们不能告诉客户他们的行为进行排序,并编写使用XML。
理想情况下是最好的,如果我们可以只指定命名空间和前缀的XmlDocument读者。 例如
dim xdoc as xmldocument = xmldocument
'add namespace and prefix
xdoc.loadxml(xmlcode)