合并几个XML并传播更改



原始问题:我有1000个具有类似结构的XML,我想将它们合并到一个包含需要翻译的元素的主XML中。一旦我翻译了这个主XML,我想将更改传播回各个XML,所以最后我将翻译1000个XML。

我很清楚如何使用XSL合并XML,但传播回更改的部分是我正在努力解决的问题。

你能给我一些指导吗?

第2版:

到目前为止,我所拥有的:

合并XML

请注意,XML可能完全不同,这需要在XML结构方面具有灵活性。

Dim XML1 = XElement.Load("D:xml1.txt")
Dim XML2 = XElement.Load("D:xml2.txt")
//datasetXMLv2 contains a table Entry with 4 columns: number, Order, File, ContentXML)
//contentXML column is set as an object, all other columns are strings
DatasetXMLv2.Tables("Entry").Rows.Add(New Object() {"1", "order1", "file1", XML1})
DatasetXMLv2.Tables("Entry").Rows.Add(New Object() {"2", "order2", "file2", XML2})
DatasetXMLv2.Tables("Entry").WriteXml("d:merge.xml")

XML1:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<item type="product">
<key>Key1</key>
<field><![CDATA[product name]]></field>
<comment></comment>
</item>

XML2:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<item type="product">
<key>Key2</key>
<field><![CDATA[product name2]]></field>
<desc><![CDATA[description2]]></desc>
<comment></comment>
<img>http://myimage</img>
</item>

合并.xml

<?xml version="1.0" standalone="yes"?>
<MergeXMLv2>
<Entry>
<Number>1</Number>
<Order>order1</Order>
<File>file1</File>
<XMLContent msdata:InstanceType="System.Xml.Linq.XElement, System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<item type="product">
<key>Key1</key>
<field><![CDATA[product name]]></field>
<comment>
</comment>
</item>
</XMLContent>
</Entry>
<Entry>
<Number>2</Number>
<Order>order2</Order>
<File>file2</File>
<XMLContent msdata:InstanceType="System.Xml.Linq.XElement, System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<item type="product">
<key>Key2</key>
<field><![CDATA[product name2]]></field>
<desc><![CDATA[description2]]></desc>
<comment>
</comment>
<img>http://myimage</img>
</item>
</XMLContent>
</Entry>
<MergeXMLv2>

正如您所看到的,合并的结果是令人满意的,因为我映射了每个XML(在本例中,我使用了file1和file2,但它将具有实际的xml1和xml2路径),然后提取存储在XMLcontent节点中的内容。

传播XML

这是我正在挣扎的部分。到目前为止,我的代码如下:

Dim mergeXML As XmlDocument
Dim nodelist As XmlNodeList
Dim node As XmlNode
mergeXML = New XmlDocument
mergeXML.Load("D:merge.xml")
nodelist = mergeXML.SelectNodes("//Entry")
For Each node In nodelist
Dim nodeNumer = node.ChildNodes(0).InnerText
Dim nodeOrder = node.ChildNodes(1).InnerText
Dim nodeFile = node.ChildNodes(2).InnerText
Dim nodeXMLcontent = node.ChildNodes(3).InnerText
Next

我缺少了简单地将XMLcontent节点的内容提取到一个单独的XML中的部分,使用Number、order、file节点来替换原始文件xml1.txt和xml2.txt。

如有任何帮助,我们将不胜感激。

谢谢!

添加这些库

Imports System.IO
Imports System.Xml.Serialization

代码将类似

Dim mergeXML As XmlDocument
Dim nodelist As XmlNodeList
Dim node As XmlNode
mergeXML = New XmlDocument
mergeXML.Load("D:merge.xml")
nodelist = mergeXML.SelectNodes("//Entry")
For Each node In nodelist
Dim nodeNumber = node.ChildNodes(0).InnerText
Dim nodeOrder = node.ChildNodes(1).InnerText
Dim nodeFile = node.ChildNodes(2).InnerText
Dim nodeXMLcontent = node.LastChild.FirstChild
Dim objStreamWriter As New StreamWriter("C:ExtractedXML_" & nodeNumber & nodeOrder & nodeFile & ".txt")
Dim x As New XmlSerializer(nodeXMLcontent.GetType)
x.Serialize(objStreamWriter, nodeXMLcontent)
objStreamWriter.Close()
Next

最新更新