我正在使用反序列化大型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存储为字符串(即“&lt; stuff&gt;一些东西要知道&lt; / stuff&gt;&lt; things&gt;我喜欢的东西&lt; /东西&gt;“中)。有意义吗?
在我的item
课程中,我在其他属性上尝试了各种 System.Xml.Serialization 属性但没有运气,例如XmlText
,XmlElement
等等。
我如何做到这一点?这似乎是一项相当普遍的任务。
答案 0 :(得分:4)
您可以使用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
属性。有关正常工作的演示,请参阅this fiddle。
答案 1 :(得分:0)
如果您正在使用XmlDocument对象,则可以使用Xpath查询不同的标记。看一下here了解更多细节,但是,使用您的示例:
XmlNode node = root.SelectSingleNode("/child/other");
Console.WriteLine(node.InnerXml);