Linq to XML 遇到如下问题:

A文件包含如下节点:

 
  
  1. <source> 
  2.     <bpt id="83">&lt;Marker Type="Index"&gt;</bpt>
  3. license
  4. <ept id="83">&lt;/Marker&gt;</ept>
  5. About License 
  6. </source>  

 需要插入到B文件,

最初方法读取A<source>节点值,经符号转换后,作为Value,设置B<target>节点值,有两种方法:

 
  
  1. findUnit.Element(TAG_TARGET).Value = strTargetValue; 
  2. findUnit.Element(TAG_TARGET).SetValue(strTargetValue); 

由于都是值类型,如此所有尖括号会被转义,结果为:

 
  
  1. <target>  
  2.     &lt;bpt id="83"&gt;&lt;Marker Type="Index"&gt;&lt;/bpt&gt; 
  3.     license 
  4.     &lt;ept id="83"&gt;&lt;/Marker&gt;&lt;/ept&gt; 
  5.     About License  
  6. </target>  

这个不是我想要的。

 

正确方法:

读取A<source>下所有节点,判断节点类型,逐个作为节点类型插入到B<target>:

 
  
  1. var nodes = transUnit.Element(TAG_SOURCE).Nodes(); 
  2. foreach (XNode node in nodes) 
  3.     if (node.NodeType == System.Xml.XmlNodeType.Element) 
  4.     { 
  5.         findUnit.Element(TAG_TARGET).Add(new XElement((XElement)node)); 
  6.     } 
  7.     else if (node.NodeType == System.Xml.XmlNodeType.Text) 
  8.     { 
  9.         findUnit.Element(TAG_TARGET).Add(node); 
  10.     } 

结果为:

 
  
  1. <target>      
  2.     <bpt id="83">&lt;Marker Type="Index"&gt;</bpt>     
  3.     license 
  4.     <ept id="83">&lt;/Marker&gt;</ept>     
  5.     About License  
  6. </target> 

目的达到了。