如何在xml反序列化期间将子节点的内部xml作为字符串返回
本文关键字:xml 内部 字符串 子节点 返回 反序列化 | 更新日期: 2023-09-27 18:02:16
我正在处理大型xml文档的反序列化。在大多数情况下,这是好的。我不关心树下面的一些子节点,但是它们确实包含我想捕获的数据,以便以后使用,但是我不想完全反序列化这些数据。我宁愿采用整个节点并将其存储为一个字符串,以便以后可以返回。
例如,给出下面的XML文档:<item>
<name>item name</name>
<description>some text</description>
<categories>
<category>cat 1</category>
<category<cat 2</category>
</categories>
<children>
<child>
<description>child description</description>
<origin>place of origin</origin>
<other>
<stuff>some stuff to know</stuff>
<things>I like things</things>
</other>
</child>
</children>
</item>
我想在其他节点中读取,并将内部xml存储为字符串(即"
在我的item
类,我尝试了各种System.Xml。序列化其他属性上的属性,如XmlText
, XmlElement
等。
我如何做到这一点?这似乎是一个相当常见的任务。
您可以通过使用XmlAnyElementAttribute
.
XmlElement
类型的对象进行反序列化来实现这一点。所以,作为一个例子,这些类可以工作:
[XmlRoot("item")]
public class Item
{
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("description")]
public string Description { get; set; }
[XmlArray("categories")]
[XmlArrayItem("category")]
public List<string> Categories { get; set; }
[XmlArray("children")]
[XmlArrayItem("child")]
public List<Child> Children { get; set; }
}
public class Child
{
[XmlElement("description")]
public string Description { get; set; }
[XmlElement("origin")]
public string Origin { get; set; }
[XmlAnyElement("other")]
public XmlElement Other { get; set; }
}
如果您想要内容的字符串值,您可以读取InnerXml
属性。
如果使用XmlDocument对象,则可以使用Xpath查询不同的标记。在这里查看更多细节,但是,使用您的示例:
XmlNode node = root.SelectSingleNode("/child/other");
Console.WriteLine(node.InnerXml);