Linq to XML 遇到如下问题:
A文件包含如下节点:
- <source>
- <bpt id="83"><Marker Type="Index"></bpt>
- license
- <ept id="83"></Marker></ept>
- About License
- </source>
需要插入到B文件,
最初方法读取A<source>节点值,经符号转换后,作为Value,设置B<target>节点值,有两种方法:
- findUnit.Element(TAG_TARGET).Value = strTargetValue;
- findUnit.Element(TAG_TARGET).SetValue(strTargetValue);
由于都是值类型,如此所有尖括号会被转义,结果为:
- <target>
- <bpt id="83"><Marker Type="Index"></bpt>
- license
- <ept id="83"></Marker></ept>
- About License
- </target>
这个不是我想要的。
正确方法:
读取A<source>下所有节点,判断节点类型,逐个作为节点类型插入到B<target>:
- var nodes = transUnit.Element(TAG_SOURCE).Nodes();
- foreach (XNode node in nodes)
- {
- if (node.NodeType == System.Xml.XmlNodeType.Element)
- {
- findUnit.Element(TAG_TARGET).Add(new XElement((XElement)node));
- }
- else if (node.NodeType == System.Xml.XmlNodeType.Text)
- {
- findUnit.Element(TAG_TARGET).Add(node);
- }
- }
结果为:
- <target>
- <bpt id="83"><Marker Type="Index"></bpt>
- license
- <ept id="83"></Marker></ept>
- About License
- </target>
目的达到了。
转载于:https://blog.51cto.com/116833/699590