我有一个文件,它有一个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);
}
}
}
答案 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文件的最顶部添加该行,看看它是否修复了此错误。