首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# - XML -将来自某个元素的内部xml视为字符串

C# - XML -将来自某个元素的内部xml视为字符串
EN

Stack Overflow用户
提问于 2011-09-24 05:16:45
回答 1查看 3.6K关注 0票数 4

我有以下XML:

代码语言:javascript
复制
<Plan>
<Error>0</Error>
<Description>1</Description>
<Document>
  <ObjectID>06098INF1761320</ObjectID>
  <ced>109340336</ced>
  <abstract>DAVID STEVENSON</abstract>
  <ced_a />
  <NAM_REC />
  <ced_ap2 />
</Document>
</Plan>

我用下面的代码反序列化它:

代码语言:javascript
复制
[XmlRoot("Plan")]
    public class EPlan
    {
        [XmlElement("Error")]
        public string Error { get; set; }

        [XmlElement("Description")]
        public string Description { get; set; }

        [XmlElement("Document")]
        public List<EDocument> Documents { get; set; }
    }

    public class EDocument
    {
        [XmlText]    
        public string Document { get; set; }   
    }

问题是,我希望元素"Document“将其内部XML包含为单个字符串,我的意思是,对象应该具有以下值:

代码语言:javascript
复制
obj.Error = "0";
obj.Description = "1";
obj.Documents[0].Document = "<ObjectID>06098INF1761320</ObjectID><ced>109340336</ced><abstract>DAVID STEVENSON</abstract><ced_a /><NAM_REC /><ced_ap2 />";

但是我之前提到的方法一直在检索空的"Document“属性。

有可能实现我想要的行为吗?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-24 05:38:41

XmlText需要一个文本节点,但实际拥有的是元素节点。我不知道是否有直接的方法可以做到这一点,但是您可以使用一个XmlAnyElement节点来收集反序列化的结果,然后将它们合并到一个字符串中(如果需要的话),如下面的示例所示。

代码语言:javascript
复制
    [XmlRoot("Plan")]
    public class EPlan
    {
        [XmlElement("Error")]
        public string Error { get; set; }

        [XmlElement("Description")]
        public string Description { get; set; }

        [XmlElement("Document")]
        public List<EDocument> Documents { get; set; }
    }

    [XmlType]
    public class EDocument
    {
        private string document;

        [XmlAnyElement]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public XmlElement[] DocumentNodes { get; set; }

        [XmlIgnore]
        public string Document
        {
            get
            {
                if (this.document == null)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var node in this.DocumentNodes)
                    {
                        sb.Append(node.OuterXml);
                    }

                    this.document = sb.ToString();
                }

                return this.document;
            }
        }
    }

    static void Test()
    {
        string xml = @"<Plan>
  <Error>0</Error>
  <Description>1</Description>
  <Document>
    <ObjectID>06098INF1761320</ObjectID>
    <ced>109340336</ced>
    <abstract>DAVID STEVENSON</abstract>
    <ced_a />
    <NAM_REC />
    <ced_ap2 />
  </Document>
  <Document>
    <ObjectID>id2</ObjectID>
    <ced>ced2</ced>
    <abstract>abstract2</abstract>
    <ced_a />
    <NAM_REC />
    <ced_ap2 />
  </Document>
</Plan>";
        XmlSerializer xs = new XmlSerializer(typeof(EPlan));
        MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml));
        EPlan obj = xs.Deserialize(ms) as EPlan;
        Console.WriteLine(obj.Documents[0].Document);
    }
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7534955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档