从数据集更新XML后保留根元素

时间:2014-10-15 23:04:54

标签: xml

我编写了一个程序来更新具有特定值的XML文件。我已运行该程序并确认除了根元素之外它已成功运行。 XML文件被加载到数据集中,用户可以从中更新值。完成此操作后,新数据将写入新的XML文件。

原始XML文件看起来像这样:

<dl:XMLDataDelivery xsi:schemaLocation=http://www.somesite.org/filename.xsd xmlns:dl=http://www.somesite.org/filename xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PartInformation>
     <PartName>Hex Bolt</PartName>
     <DetailedInfo>
       <PartNumber>88-901</PartNumber>
       <SerialNumber>SN1234</SerialNumber>
     </DetailedInfo>
  </PartInformation>
</dl:XMLDataDelivery>

但是在更新之后,XML会改变为:

<dl:XMLDataDelivery xmlns:dl=http://www.somesite.org/filename>
<PartInformation>
     <PartName>Hex Bolt</PartName>
     <DetailedInfo>
       <PartNumber>88-901</PartNumber>
       <SerialNumber>SN1234</SerialNumber>
     </DetailedInfo>
  </PartInformation>
</dl:XMLDataDelivery>

我已经尝试了几种方法将缺失的数据添加回根元素而没有运气。我查看了更改数据集的命名空间,但只允许编辑而不是添加。我还尝试创建要添加的新属性,但也没有成功。这只是我尝试过的众多事情之一(注意这是在dataset.WriteXML(fileName)之后:

    'Dim xDoc As New XmlDocument
    'Dim ns As XmlNamespaceManager

    'xDoc.Load(newFileString)
    'Dim xAtt As XmlAttribute = xDoc.CreateAttribute("xsi:schemaLocation")
    'xAtt.Value = "http://www.somesite.org/filename"
    'xDoc.Attributes.Append(xAtt)

    'ns = New XmlNamespaceManager(xDoc.NameTable)
    'ns.AddNamespace("xsi:SchemaLocation", "http://www.somesite.org/filename")
    'xDoc.Save("thisXML.xml")

将root元素恢复为原始格式或编辑当前格式的任何帮助都会很棒。非常感谢所有人。 (如果需要更多代码来正确评估,请告诉我)

1 个答案:

答案 0 :(得分:0)

几乎忘了从我的评论中提供答案(抱歉)......

我在数据集更新和writeXML函数之后添加了以下代码:

    Dim xDoc As New XmlDocument
    Dim schemaLocation As XmlAttribute = Nothing
    Dim schemaString As String = "http://www.w3.org/2001/XMLSchema-instance"
    Dim schemaValue As String = "http://www.somesite.org/filename.xsd"

    xDoc.Load(newFileString)
    schemaLocation = xDoc.CreateAttribute("xsi", "schemaLocation", schemaString)
    schemaLocation.Value = schemaValue
    xDoc.DocumentElement.SetAttributeNode(schemaLocation)
    xDoc.Save(newFileString)

所以现在根属性显示为:

<dl:XMLDataDelivery xmlns:dl="http://www.somesite.org/filename" xsi:schemaLocation="http://www.somesite.org/filename.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

kennyzx确认订单并不重要。正如我在评论中提到的,我调整了MSDN Forum中提供的答案来解决我的问题。