XML元素';s中的元素/属性注释

本文关键字:元素 注释 属性 XML | 更新日期: 2023-09-27 18:28:35

是否可以在没有幻影类的情况下通过xml注释获得元素的(子)元素或元素自己的属性?

当前代码狙击手示例:XML:

<root>
    ...
    <epno type="1">12</epno>
    ...
</root>

C#类:

[XmlRoot("root")]
class Root {
    ...
    [XmlElement("epno")]
    public Epno epno;
    ...
}
class Epno { //"Phantom" class
    [XmlAttribute("type")]
    public int type;
    [XmlText]
    public int epno;
}

我想要的是移除Epno类,并将这些道具移到Root类中。。。

[XmlRoot("root")]
class Root {
    ...
    [XmlElement("epno")]
    [XmlAttribute("type")] // I need a solution for this...
    public int type;
    [XmlElement("epno")]
    public int epno;
    ...
}

还有另一个地方,那里有一个加号,我想得到一个元素的属性,这是另一个元素。。。然后我想得到元素的元素值。

为此,Xml示例:

<root>
    <rates>
        <permanent votes="100">6.54</permanent>
        <temprate votes="100">6.54</temprate>
    </rates>
</root>

在这里,我想把这些值放在根类中,但在这种情况下,至少需要2个类来解析它

那么,有没有一种方法可以通过注释来反序列化这些类,而不需要这些幻影类,也不需要编写我自己的xml解析器?

XML元素';s中的元素/属性注释

在XML序列化期间,无法仅使用XML序列化属性来获取根类的"一个子元素及其属性"并将其转换为其根类的元素。

但是,您可以通过以下方式归档所需结果:

  • 使用XSLT转换
  • 实现IXmlSerializable

我想您要找的是XmlDocument。

这完成了您的第二项任务:

XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml("<root><rates> <permanent votes = '"100'" > 6.54 </permanent>  <temprate votes = '"100'" > 6.54 </temprate></rates> </root> ");
// find the nodes we are interested in
XmlNode Rates = xDoc.SelectSingleNode("//rates");
XmlNode Root = xDoc.SelectSingleNode("root");
// We can't modify a collection live so create a temporary list
List<XmlNode> TempList = new List<XmlNode>();
foreach (XmlNode Node in Rates.ChildNodes)
{
    TempList.Add(Node);          
}
// remove the nodes and their container node
foreach (XmlNode Node in TempList)
{
    Node.ParentNode.RemoveChild(Node);
}
// Use this to remove the parent and children
// in one step
// Rates.ParentNode.RemoveChild(Rates); 
// insert in desired location
foreach (XmlNode Node in TempList)
{
    Root.AppendChild(Node);
}
// Hope this works!
xDoc.Save("C:''test.xml");