【问题标题】:C# XML Serialization - How to get XML node structure as stringC# XML 序列化 - 如何将 XML 节点结构作为字符串获取
【发布时间】:2014-04-25 14:23:34
【问题描述】:

我不知道是否可以在 C# 中将 xml 节点结构作为字符串获取。在 Web 服务调用之后,我需要将 opticxml 节点内的所有内容读入一个简单的纯字符串。 我有这样的xml:

    <opticxml>
        <Optic>
            <header>
              ...
            </header>
            <items>
                <item>...</item>
                <item>...</item>
                ...
            </item>
            <experimental>
                <frame>...</frame>
                <lens>...</lens>
            </experimental>
        </Optic>
    <opticxml>

然后我有这样的响应类:

    [XmlRoot("Data")]
    public class Data4Response
    {
        ...
        [XmlElement("opticxml")]
        public string opticxml { get; set; }
    }

我从 WS 调用得到正确响应,而不是将 BASE64 编码字符串转换为字符串 (UTF8),当我想将其解析为 Data4Response 类时,我得到了异常。

    public DataResponse()
    {
        Data = new Data4Response();
        ...
    }

    public static DataResponse DeserializeMessage(string input)
    {
        ...
        ret = (DataResponse)s.Deserialize(reader);
        ...
    }

解决办法是什么?我应该如何配置以字符串形式获取 Optic 节点的 XmlElement("opticxml")?

感谢您的帮助。

【问题讨论】:

  • 我会创建一个递归扩展方法。字符串 xmlString(此 XmlElement)。然后对于每个子元素,返回 child.xmlString()

标签: c# xml serialization


【解决方案1】:

不确定性能影响,但您可以试试这个:

var XmlDocument doc = new XmlDocument();
doc.LoadXml(input); // assuming "input" contains your Xml as above
var opticNode = doc.SelectSingleNode("/opticxml").InnerXml;
// at this point, opticNode will be a string containing everything inside the opticxml element.

作为(非常)粗略的基准,LoadXml 和 SelectSingleNode 在 8.6 秒内一起执行了 1,000,000 次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2016-12-18
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多