Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#选择节点作为主节点属性_C#_Xml_Xml Namespaces_Xmlnodelist - Fatal编程技术网

C#选择节点作为主节点属性

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文件主节点的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-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并跳过第一行以避免这些错误。太好了!!谢谢伟大的谢谢