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

本文关键字:扩展名 另一个 格式 何读取 读取 文件 xml | 更新日期: 2023-09-27 18:37:27

我有一个文件,它有一个xml结构,但有另一个扩展名(.qlic)。我需要读取它才能获得属性 UserCount,此值位于许可证标记内。下面是文件中的代码:

    <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);
        }
    }

}

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

使用 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] 属性进行标记。

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

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

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

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