如何在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存储为字符串(即"some stuff to knowI like things")。有意义吗?

在我的item类,我尝试了各种System.Xml。序列化其他属性上的属性,如XmlText, XmlElement等。

我如何做到这一点?这似乎是一个相当常见的任务。

如何在xml反序列化期间将子节点的内部xml作为字符串返回

您可以通过使用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);