繁体   English   中英

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

[英]C# Get all text from xml node including xml markup using Visual studio generated class

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

<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>

转换后的类包含

[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属性。 但没有希望。

任何线索?

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

[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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM