省略元素包装器并获取 xml 根值

本文关键字:获取 xml 根值 元素 包装 | 更新日期: 2023-09-27 18:24:15

<root xmlns:test="url" test:attr1="10" test:attr2="someValue>
    <elementwrapper>
        <secondElementwrapper>
            <element>someValue</element>
            <differentelement>anotherValue</differentelement>
        </secondElementwrapper>
    </elementwrapper>
</root>

创建以下类:

public class XmlEntities
    {
        [XmlRoot("root")]
        public class Root
            {
                [XmlElement("elementwrapper")]
                public Elementwrapper Elementwrapper{ get; set; }
            }
        public class Elementwrapper
            {
                [XmlElement("secondElementwrapper")]
                public SecondElementwrapper SecondElementwrapper{ get; set; }
            }
        public class Values
            {
                [XmlElement("element")]
                public string Element{ get; set; }
                [XmlElement("differentelement")]
                public string Differentelement{ get; set; }
            }
    }

这是我序列化和反序列化 xml 的地方:

var reader = XmlReader.Create(url);
var xmlRecord = new XmlEntities.Root();
try
    {
        var serializer = new XmlSerializer(typeof(XmlEntities.Root));
        xmlRecord = (XmlEntities.Root)serializer.Deserialize(reader);
        reader.Close();
    }
catch (Exception e) { }
  • 我想访问 xmlRecord.Element 而不是 xmlRecord.Elementwrapper.Values.Element
  • 如何获取 test:attr1 值?

如果我删除类元素包装器和根,xmlRecord 返回空。根类中的 [XmlAttribute] 获取 attr1 值对我不起作用。

谢谢!

编辑:该元素是复制/粘贴错误的行为。修复了这个问题。我还添加了:在attr1前面测试,忘记了。

编辑:在根类中添加 sgk 提到的以下内容,允许我访问该属性

[XmlAttribute("attr1", Namespace = "url")]
public string attr { get; set; }

编辑:有没有办法以不同的方式映射类?所以我可以直接访问xmlRecord.Element吗?

编辑:@TonyStark似乎我需要以不同的方式接近我想要的东西,但这已经有效了,我只需要通过节点(xmlRecord.elementwrapper.secondelementwrapper.element(访问元素,供那些想知道的人使用。

要访问根的属性,我只需使用 : xmlRecord.attr 在我添加了上面写的 xmlattribute 之后。

省略元素包装器并获取 xml 根值

  1. 我想访问xmlRecord.Element而不是xmlRecord.Elementwrapper.Values.Element - 根据您拥有的 XML 结构,要Deserialize和访问<element>值和<differentelement>值 - 您需要通过 root-->elementwrapper-->secondElementwrapper。
  2. 如何获取 attr1 值? - 在类根目录内添加[XmlAttribute("attr1")]

然后,应该[XmlElement("elementwrapper")] [XmlElement("<elementwrapper>")]否则当您Deserialize时,您将始终获得 null,因为没有匹配的元素。

见下文

public class XmlEntities
{
    [XmlRoot("root")]
    public class Root
    {
        [XmlElement("elementwrapper")]
        public Elementwrapper Elementwrapper { get; set; }
        [XmlAttribute("attr1", Namespace="url")]
        public string attr1;
    }
    public class Elementwrapper
    {
        [XmlElement("secondElementwrapper")]
        public SecondElementwrapper SecondElementwrapper { get; set; }
    }
    public class SecondElementwrapper
    {
        [XmlElement("element")]
        public string Element { get; set; }
        [XmlElement("differentelement")]
        public string Differentelement { get; set; }
    }        
}
相关文章: