省略元素包装器并获取 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 之后。
- 我想访问
xmlRecord.Element
而不是xmlRecord.Elementwrapper.Values.Element
- 根据您拥有的 XML 结构,要Deserialize
和访问<element>
值和<differentelement>
值 - 您需要通过 root-->elementwrapper-->secondElementwrapper。 - 如何获取 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; }
}
}