使用XDocument将选定的XML节点转换为字符串
使用XDocument将XML选定节点转换为字符串
很简单,咱们用C#的XDocument来处理这个需求,我给你分几种常见场景举例,对应你提供的XML结构:
首先,先把你的XML加载到XDocument里——你可以直接解析字符串,或者从文件加载:
// 你的XML字符串 string xmlContent = @"<?xml version=""1.0"" encoding=""utf-8""?> <GlobalResponses> <Filters> <FilterId>11</FilterId> <FilterId>5</FilterId> <FilterId>10</FilterId> </Filters> <Responses> <Response> <Name>Bob</Name> </Response> <Response> <Name>Jim</Name> </Response> <Response> <Name>Steve</Name> </Response> </Responses> </GlobalResponses>"; // 加载到XDocument XDocument doc = XDocument.Parse(xmlContent);
场景1:提取单个节点转为字符串
比如你想把第一个<FilterId>或者某个<Response>转成字符串:
// 获取第一个FilterId节点并转字符串 var firstFilterId = doc.Descendants("FilterId").FirstOrDefault(); if (firstFilterId != null) { string filterIdStr = firstFilterId.ToString(); // 输出结果:<FilterId>11</FilterId> } // 获取Name为Jim的Response节点转字符串 var jimResponse = doc.Descendants("Response") .FirstOrDefault(r => r.Element("Name")?.Value == "Jim"); if (jimResponse != null) { string jimResponseStr = jimResponse.ToString(); // 输出结果:<Response><Name>Jim</Name></Response> }
场景2:提取整个父节点(包含所有子节点)转为字符串
比如把整个<Filters>或者<Responses>节点转成完整的XML字符串:
// 获取整个Filters节点 var filtersNode = doc.Element("GlobalResponses")?.Element("Filters"); if (filtersNode != null) { string filtersStr = filtersNode.ToString(); /* 输出结果: <Filters> <FilterId>11</FilterId> <FilterId>5</FilterId> <FilterId>10</FilterId> </Filters> */ } // 获取整个Responses节点同理 var responsesNode = doc.Element("GlobalResponses")?.Element("Responses"); if (responsesNode != null) { string responsesStr = responsesNode.ToString(); }
场景3:提取多个零散节点并拼接成字符串
比如你想把所有<FilterId>节点单独提取出来拼接成一个字符串:
var allFilterIds = doc.Descendants("FilterId"); string filterIdsStr = string.Join(Environment.NewLine, allFilterIds.Select(f => f.ToString())); /* 输出结果: <FilterId>11</FilterId> <FilterId>5</FilterId> <FilterId>10</FilterId> */
如果想要不带格式的紧凑字符串,可以用SaveOptions.DisableFormatting参数:
string compactFilterStr = filtersNode?.ToString(SaveOptions.DisableFormatting); // 输出结果:<Filters><FilterId>11</FilterId><FilterId>5</FilterId><FilterId>10</FilterId></Filters>
内容的提问来源于stack exchange,提问作者neildt
相关产品推荐
相关产品推荐

