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序列化期间,无法仅使用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");