C#选择节点作为主节点属性
我正在尝试获取此xml文件主节点的logicalName属性的值:C#选择节点作为主节点属性,c#,xml,xml-namespaces,xmlnodelist,C#,Xml,Xml Namespaces,Xmlnodelist,我正在尝试获取此xml文件主节点的logicalName属性的值: <?xml version="1.0" encoding="ISO-8859-1"?> <ticketlayout xmlns="http://www.example.com/ticketlayout" logicalName="target.xml" deviceCode="1" measurement="mm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst
<?xml version="1.0" encoding="ISO-8859-1"?>
<ticketlayout xmlns="http://www.example.com/ticketlayout" logicalName="target.xml" deviceCode="1" measurement="mm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/ticketlayout">
<fontdefinition id="BarCode">
<fontname>Code128bWin</fontname>
<size measure="pt">16</size>
</fontdefinition>
</ticketlayout>
但我没有节点。我尝试过不再使用名称空间和节点,然后继续。
谁能帮帮我吗
提前感谢。如果您想获取值:target.xml 试试这个代码
XmlDocument fLayout = new XmlDocument();
fLayout.Load("myFile.xml"); // your XML file
var attrib = fLayout["ticketlayout"].Attributes["logicalName"].Value;
如果要获取值:target.xml 试试这个代码
XmlDocument fLayout = new XmlDocument();
fLayout.Load("myFile.xml"); // your XML file
var attrib = fLayout["ticketlayout"].Attributes["logicalName"].Value;
首先,您的XML是无效的。 为了实现您的目标,我修改了这种方式。 XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<ticketlayout xmlns="http://www.example.com/ticketlayout" logicalName="target.xml" deviceCode="1" measurement="mm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/ticketlayout">
<fontdefinition id="BarCode">
<fontname>Code128bWin</fontname>
<size measure="pt">16</size>
</fontdefinition>
</ticketlayout>
然后可以使用序列化程序:
public class Serializer
{
public T Deserialize<T>(string input) where T : class
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (StringReader stringReader = new StringReader(input))
{
return (T)xmlSerializer.Deserialize(stringReader);
}
}
public string Serialize<T>(T ObjectToSerialize)
{
XmlSerializer xmlSerializer = new XmlSerializer(ObjectToSerialize.GetType());
StringBuilder builder = new StringBuilder();
using (StringWriterWithEncoding textWriter = new StringWriterWithEncoding(builder, Encoding.UTF8))
{
xmlSerializer.Serialize(textWriter, ObjectToSerialize);
return textWriter.ToString();
}
}
}
public class StringWriterWithEncoding : StringWriter
{
Encoding encoding;
public StringWriterWithEncoding(StringBuilder builder, Encoding encoding)
: base(builder)
{
this.encoding = encoding;
}
public override Encoding Encoding
{
get { return encoding; }
}
}
公共类序列化程序
{
公共T反序列化(字符串输入),其中T:class
{
XmlSerializer XmlSerializer=新的XmlSerializer(typeof(T));
使用(StringReader StringReader=新StringReader(输入))
{
返回(T)xmlSerializer.Deserialize(stringReader);
}
}
公共字符串序列化(T ObjectToSerialize)
{
XmlSerializer XmlSerializer=新的XmlSerializer(ObjectToSerialize.GetType());
StringBuilder=新的StringBuilder();
使用(StringWriterWithEncoding textWriter=new StringWriterWithEncoding(builder,Encoding.UTF8))
{
序列化(textWriter,ObjectToSerialize);
返回textWriter.ToString();
}
}
}
公共类StringWriterWithEncoding:StringWriter
{
编码;
公共StringWriterWithEncoding(StringBuilder,Encoding-Encoding)
:基底(建筑商)
{
this.encoding=编码;
}
公共覆盖编码
{
获取{返回编码;}
}
}
最后,通过执行以下操作,您可以访问任何您想要的内容:
var serializer = new Serializer();
//I used a local file for testing, but it should be the same thing with your file
var xmlInputData = File.ReadAllText(@"MyXmlPath");
var output = serializer.Deserialize<Ticketlayout >(xmlInputData);
var logicalName = output.LogicalName;
var serializer=new serializer();
//我使用了一个本地文件进行测试,但它应该与您的文件相同
var xmlInputData=File.ReadAllText(@“MyXmlPath”);
var output=serializer.Deserialize(xmlInputData);
var logicalName=output.logicalName;
首先,您的XML无效。
为了实现您的目标,我修改了这种方式。
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<ticketlayout xmlns="http://www.example.com/ticketlayout" logicalName="target.xml" deviceCode="1" measurement="mm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/ticketlayout">
<fontdefinition id="BarCode">
<fontname>Code128bWin</fontname>
<size measure="pt">16</size>
</fontdefinition>
</ticketlayout>
然后可以使用序列化程序:
public class Serializer
{
public T Deserialize<T>(string input) where T : class
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (StringReader stringReader = new StringReader(input))
{
return (T)xmlSerializer.Deserialize(stringReader);
}
}
public string Serialize<T>(T ObjectToSerialize)
{
XmlSerializer xmlSerializer = new XmlSerializer(ObjectToSerialize.GetType());
StringBuilder builder = new StringBuilder();
using (StringWriterWithEncoding textWriter = new StringWriterWithEncoding(builder, Encoding.UTF8))
{
xmlSerializer.Serialize(textWriter, ObjectToSerialize);
return textWriter.ToString();
}
}
}
public class StringWriterWithEncoding : StringWriter
{
Encoding encoding;
public StringWriterWithEncoding(StringBuilder builder, Encoding encoding)
: base(builder)
{
this.encoding = encoding;
}
public override Encoding Encoding
{
get { return encoding; }
}
}
公共类序列化程序
{
公共T反序列化(字符串输入),其中T:class
{
XmlSerializer XmlSerializer=新的XmlSerializer(typeof(T));
使用(StringReader StringReader=新StringReader(输入))
{
返回(T)xmlSerializer.Deserialize(stringReader);
}
}
公共字符串序列化(T ObjectToSerialize)
{
XmlSerializer XmlSerializer=新的XmlSerializer(ObjectToSerialize.GetType());
StringBuilder=新的StringBuilder();
使用(StringWriterWithEncoding textWriter=new StringWriterWithEncoding(builder,Encoding.UTF8))
{
序列化(textWriter,ObjectToSerialize);
返回textWriter.ToString();
}
}
}
公共类StringWriterWithEncoding:StringWriter
{
编码;
公共StringWriterWithEncoding(StringBuilder,Encoding-Encoding)
:基底(建筑商)
{
this.encoding=编码;
}
公共覆盖编码
{
获取{返回编码;}
}
}
最后,通过执行以下操作,您可以访问任何您想要的内容:
var serializer = new Serializer();
//I used a local file for testing, but it should be the same thing with your file
var xmlInputData = File.ReadAllText(@"MyXmlPath");
var output = serializer.Deserialize<Ticketlayout >(xmlInputData);
var logicalName = output.LogicalName;
var serializer=new serializer();
//我使用了一个本地文件进行测试,但它应该与您的文件相同
var xmlInputData=File.ReadAllText(@“MyXmlPath”);
var output=serializer.Deserialize(xmlInputData);
var logicalName=output.logicalName;
对不起,属性名不是“name”,而是“logicalName”。当编码不是UTF-8时,网络库会给出错误。我通常使用StreamReader并跳过第一行以避免这些错误。抱歉,属性名称不是“name”,而是“logicalName”。当编码不是UTF-8时,网络库会给出错误。我通常使用StreamReader并跳过第一行以避免这些错误。太好了!!谢谢伟大的谢谢