XDocument,它说节点是文本但它是一个元素

时间:2014-04-11 10:32:20

标签: c# linq-to-xml

我正在阅读包含如下标记的XML:

<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节点时,我得到的节点类型是Text,但它应该是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

由于

2 个答案:

答案 0 :(得分:0)

首先检查您的XML是否格式正确

我可以让这个工作

//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>

如果这个例子不够用,请提供一些代码示例以获得更多帮助。

答案 1 :(得分:0)

最后,我解决了这个检查节点是否正确的问题:

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