原始问题: 我有1000个具有类似结构的XML,我想将它们合并为一个主XML,其中包含我需要翻译的元素。一旦我将这个主XML转换成了我想要将更改传播回各个XML,所以最后我将翻译1000个XML。
我很清楚如何使用XSL合并XML,但是将这些更改传播回来的部分是我正在努力解决的问题。
你能否就如何做到这一点给出任何指导?
EDIT2:
所以这就是我到目前为止所做的:
合并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>
的merge.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
我错过了使用Number,order,文件节点将XML内容节点的内容简单地提取到单独的XML来替换原始文件xml1.txt和xml2.txt的部分。
任何帮助都将受到高度赞赏。
谢谢!
答案 0 :(得分:0)
添加这些库
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