我编写了一个程序来更新具有特定值的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元素恢复为原始格式或编辑当前格式的任何帮助都会很棒。非常感谢所有人。 (如果需要更多代码来正确评估,请告诉我)
答案 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中提供的答案来解决我的问题。