如何读取此文件(是xml格式但具有另一个扩展名)

时间:2015-01-14 16:44:52

标签: c# xmlreader

我有一个文件,它有一个xml结构,但有另一个扩展名(.qlic)。我需要读取它以获取属性UserCount,此值在License标记内。 这是文件中的代码:

    <License xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" UserCount="542">
<OrganizationName>**********</OrganizationName>
<ServerName>******</ServerName>
<Servers />
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>Itavzm993LQxky+HrtwpJmQQSco=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>j7VVqrjacSRBgbRb1coGK/LQFRFWv9Tfe5y5mQmYM9HJ8EoKGtigOycoOPdCeIaIctVGT3rrgTW+2KcVmv92LTdpu7eC3QJk2HZgqRFyIy+HR9XQ9qYPV8sLLxVkkESvG19zglX66qkBJsm2UL6ps3BhnEt/jrs+FEsAeCBzM6s=</SignatureValue>
</Signature>
</License>

当我尝试阅读文件时,这是个例外:"{"<License xmlns=''> was not expected."}"

这是我的c#代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Xml;
using System.Xml.Serialization;

namespace xmlReader
{
    [XmlRoot(ElementName = "License"), XmlType("Licence")]
    public class ReaderXML
    {
        public ReaderXML()
        { 
        }

        public class result
        {
            public string _result;
        }

        public static void ReadXML()
        {
            XmlSerializer reader = new XmlSerializer(typeof(result));
            StreamReader file = new StreamReader(@"C:\Users\User\Desktop\myfile.qlic");
            result overview = new result();
            overview = (result)reader.Deserialize(file);

            Console.WriteLine(overview._result);

        }
    }

}

2 个答案:

答案 0 :(得分:1)

使用Linq to Xml查询属性UserCount的任务可以很简单:

using (var reader = new StreamReader(@"C:\Users\User\Desktop\myfile.qlic"))
{
    XDocument lic = XDocument.Load(reader);
    string usercount = lic.Element("License").Attribute("UserCount").Value;
}

.Element(name)将只返回具有给定名称的第一个元素。

在MSDN上查看LINQ to Xml

如果仍需要反序列化问题中显示的Xml,则为XmlSerializer指定的类型需要具有匹配的属性。

它也可以包含其他属性,您可以使用[XmlIgnore]属性进行标记。

答案 1 :(得分:0)

错误是由于缺少XML文件顶部的XML声明:

<?xml version='1.0' encoding='UTF-8'?>

XML解析器期望声明存在,因此错误消息"{"<License xmlns=''> was not expected."}"

没有它,它只是一个具有类似XML结构的文本文件。尝试在XML文件的最顶部添加该行,看看它是否修复了此错误。