我有使用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>
答案 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);
}
}
}
}
}