首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#使用Visual生成的类从xml节点获取所有文本,包括xml标记。

C#使用Visual生成的类从xml节点获取所有文本,包括xml标记。
EN

Stack Overflow用户
提问于 2016-11-21 07:57:13
回答 1查看 218关注 0票数 1

在visual中使用xml到c#特性将下面的xml标记转换为C#类。

代码语言:javascript
复制
<books>
<book name="Book-1">
<author>
<name>Author-1<ref>1</ref></name>
</author>
</book>
<book name="Book-2">
<author>
<name>Author-1<ref>1</ref></name>
</author>
</book>
</books>

转换后的类包含

代码语言:javascript
复制
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class booksBookAuthorName
    {
        private byte refField;     // 1

        private string[] textField; // 2

我们需要的是Author-1<ref>1</ref>作为读取作者名称时的输出,方法是保留标记。

我们已经尝试过https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmltextattribute(v=vs.110).aspx属性。但没有希望。

有什么线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-21 08:23:43

您可以使用[XmlAnyElement("name")]将每个作者的<name>节点的XML捕获为XmlElement (或XElement)。您想要的确切文本是该元素的InnerXml

代码语言:javascript
复制
[XmlRoot(ElementName = "author")]
public class Author
{
    [XmlAnyElement("name")]
    public XmlElement NameElement { get; set; }

    [XmlIgnore]
    public string Name
    {
        get
        {
            return NameElement == null ? null : NameElement.InnerXml;
        }
        set
        {
            if (value == null)
                NameElement = null;
            else
            {
                var element = new XmlDocument().CreateElement("name");
                element.InnerXml = value;
                NameElement = element;
            }
        }
    }
}

这就消除了对booksBookAuthorName类的需求。

示例小提琴显示了与您的XML对应的一组完整类的反序列化,这些类最初是从http://xmltocsharp.azurewebsites.net/生成的,之后根据需要对Author进行了修改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40715261

复制
相关文章

相似问题

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