【问题标题】:XML Rename all child elements to the same tag nameXML 将所有子元素重命名为相同的标记名称
【发布时间】:2016-07-15 21:10:25
【问题描述】:

我有以下 XML 文档结构。

<FareSearchResponse>
    <AirlineList>
        <AQR>...</AQR>
        <ABA>...</ABA>
        <AAI>...</AAI>
        <A9W>...</A9W>
        <AVS>...</AVS>
        <AAF>...</AAF>
        <AEY>...</AEY>
        <ALH>...</ALH>
        <AQF>...</AQF>
    </AirlineList>
</FareSearchResponse>

我想将 AirlineList 的所有子元素重命名为 Airline。子名称标签各不相同,可以是任何名称。因此,无法知道将出现哪些名称标签以及它们将是什么。它是来自 Web 服务的动态 XML 文档。到目前为止,我已经设法将 XML 字符串加载到 XmlDocument 中;

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(System.Web.HttpUtility.HtmlDecode(resultString));
XElement firstChild = xmlDoc.ToXDocument().Root.Elements().First();

我想选择所有 AirlineList 元素并将它们重命名为 Airline。

我添加了更多细节。 XML 文档现在包含在 firstChild 中。如何替换 firstChild 中的元素而不是直接从 XmlDocument 替换元素

谢谢。

【问题讨论】:

  • 不确定 XML 库中是否有方法,但您可以使用字符串,然后对其进行字符串替换。然后序列化回 XML。
  • 您可以使用 XPath 来实现。
  • @Casey。子元素名称标签各不相同,因此无法知道标签的名称
  • @JCM 我该怎么做?
  • 如果你这样做:xmlDoc.InnerXml = xmlDoc.InnerXml.Replace("AirlineList", "Airline");??

标签: c# asp.net xmldocument


【解决方案1】:

我想选择所有 AirlineList 元素并将它们重命名为 Airline。

使用LinqXml 并为子元素更新Name

var doc = XDocument.Load(filepath);

foreach (var element in doc.Descendants("AirlineList").Elements())
{
    element.Name ="Airline";
}

查看example

【讨论】:

  • 看起来不像你做的那么简单。假设我有: XElement firstChild = xmlDoc.ToXDocument().Root.Elements().First();作为我的 xml 的起点。如何将 AirlineList 的所有元素替换为 Airline
  • 您检查了example 链接吗?我错过了什么?
  • 据我了解,您希望将 AirLineList 的所有子元素重命名为 Airline
  • 是的。但是我对 XML 文档进行了一些更改,最终将 XML 文档的重要部分裁剪为 XElement 类型。它仍然是相同的结构,但具有不同的数据类型。那么如何将所有子 AirlineList 从此数据类型 [ XElement ] 替换为 Airline ?
  • 你修改后的Xml看起来怎么样?
猜你喜欢
  • 2019-02-15
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2022-07-06
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多