使用xDocument或XmlDocument c#读取无效的xml

时间:2017-06-12 13:43:57

标签: c# xml xslt xmldocument

我有使用xslt转换xml文件的情况。

现在我需要修改结果xml文件,该文件无效xml且xml解析器无法读取它。

它不以xml声明开头,并且该文件没有一个根。

我无法更改文件的结构,因为这是我需要使用的另一个标准,但我需要在有效的xml中添加节点,并从特定节点获取信息。

我已经尝试使用像这样

XmlDocument doc = new XmlDocument();
doc.XmlResolver = null;
doc.Load(InputFile);
doc.DocumentElement;

有了这个,我只从无效的XML内部获取了东西,但没有从有效的XML内部获取东西

我真正需要的是" validXmlWithDeclaration"节点

结构是这样的。

<invalidXMLWithoutDeclaration>
 <foo>
  <bar>
  </bar>
 </foo>
</invalidXMLWithoutDeclaration>
<validXmlWithDeclaration>
 <foo>
  <bar>
  </bar>
 </foo>
</validXmlWithDeclaration>
<invalidXMLWithoutDeclaration>
 <foo>
  <bar>
  </bar>
 </foo>
</invalidXMLWithoutDeclaration>
<validXmlWithDeclaration>
 <foo>
  <bar>
  </bar>
 </foo>
</validXmlWithDeclaration>
<invalidXMLWithoutDeclaration>
 <foo>
  <bar>
  </bar>
 </foo>
</invalidXMLWithoutDeclaration>
<validXmlWithDeclaration>
 <foo>
  <bar>
  </bar>
 </foo>
</validXmlWithDeclaration>

2 个答案:

答案 0 :(得分:0)

以下示例通过设置InnerXml的{​​{1}}属性来解析您显示的代码段并选择其中的一些元素:

XmlDocumentFragment

答案 1 :(得分:0)

您只是没有格式良好的xml文件。请参阅下面的解决方案,使用XmlRead和XDocument

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication62
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ConformanceLevel = ConformanceLevel.Fragment;
            XmlReader reader = XmlReader.Create(FILENAME);

            while (!reader.EOF)
            {
                if (reader.Name != "invalidXMLWithoutDeclaration")
                {
                    reader.ReadToFollowing("invalidXMLWithoutDeclaration");
                }
                if (!reader.EOF)
                {
                    XElement invalidXMLWithoutDeclaration = (XElement)XElement.ReadFrom(reader);
                }
            }

        }

    }
}