在vb.net中添加XML命名空间参考(Adding XML namespace reference

2019-11-04 13:13发布

我正在写的软件,从我们的客户接受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)

Answer 1:

这似乎是解决这个问题的办法是改变XML加载到XmlDocument的方式。 从前我是解析字符串到的XmlDocument的loadXML方法之前。 我现在解析字符串转换成stringreader,然后解析stringreader成一个XmlTextReader。 该XmlTextReader的有命名空间属性,它允许你把命名空间validataion关闭。 然后,XmlTextReader的可被解析成的XmlDocument的负载方法。

Dim xstring As String = xmldata
Dim sreader As New System.IO.StringReader(xstring) 'load string into stringreader
Dim xreader As New XmlTextReader(sreader)          'load stringreader into xmltextreader
xreader.Namespaces = False                         'turn off namespaces
Dim xdoc As XmlDocument = New XmlDocument          'create xmldocument
xdoc.Load(xreader)                                 'Load xmltextreader into xmldocument


文章来源: Adding XML namespace reference in vb.net