2014-04-11 23 views
0

我讀包含這樣的標籤的XML:的XDocument,上面說一個節點是文本,但它是一個元素

<source><bpt id="1">&lt;donottranslate&gt;</bpt><ph id="2">($ T_353_1 Parent ID $)</ph><ept id="1">&lt;/donottranslate&gt;</ept></source> 

當讀取source節點我得到這個節點類型是文本,但它應該是Element。 這是一個我正在接收的XML,我無法更改它。

你知道我該如何解決這個問題?

這是我的代碼:

XDocument doc = XDocument.Load(fileName, LoadOptions.PreserveWhitespace);    

     foreach (var elUnit in doc.Descendants("trans-unit")) 
     { 
      if (elUnit.AttributeString("translate").ToString() == "no") 
      { 
       foreach (var elSource in elUnit.Elements("source")) 
       { 
        string text = ""; 
        foreach (var node in elSource.DescendantNodes().Where(n => XmlNodeType.Text == n.NodeType).ToList()) 
        { 
         //When reading that "source" node, it enters inside this code 

感謝

+0

你的XML格式不正確formed-'dnt'和'bpt'相交海誓山盟。 – StuartLC

回答

0

最後,我解決了這個檢查,如果該節點的正確與否:

if (System.Security.SecurityElement.IsValidText(text.XmlDecodeEntities())) 
0

首先檢查你的XML是否簡潔(wellformed)

我能得到這個工作

//using System.Xml.Linq; 
var str = "<source><bpt id=\"1\">&lt;donottranslate&gt;</bpt>" + 
      "<ph id=\"2\">($ T_353_1 Parent ID $)</ph>" + 
      "<ept id=\"1\">&lt;/donottranslate&gt;</ept></source>"; 
XElement element = XElement.Parse(str); 
Console.WriteLine(element); 

輸出是這

<source> 
    <bpt id="1">&lt;donottranslate&gt;</bpt> 
    <ph id="2">($ T_353_1 Parent ID $)</ph> 
    <ept id="1">&lt;/donottranslate&gt;</ept> 
</source> 

更多的幫助,如果這個例子中,如果沒有suffient請提供一些代碼示例。

相關問題