【问题标题】:How to iterate through each node in an XML and map each tag to a new tag in a new XML file using C#?如何使用 C# 遍历 XML 中的每个节点并将每个标记映射到新 XML 文件中的新标记?
【发布时间】:2015-06-30 07:03:48
【问题描述】:

我需要将 XML 文件(遵循特定框架)转换为 OWL 文件(也具有 XML 格式)。要进行这种转换,我需要编写 C# 代码。

我无法遍历 XML 文件中的每个节点以将其映射到新文件中,而且我也不了解如何获取现有 XML 中的标签名称。

XML 示例是:

<ECClass name="Person">
    <ECAttributes>
        <ECObject ID="person1" size="20">
        </ECObject>
    </ECAttributes>
    <ECAttributes>
    </ECAttributes>
</ECClass>

我想把它映射成这样的:

<Class reference="Person">
    <Property>
        <Instance ID="person1">
        </Instance>
    </Property>
    <Property>
    </Property>
</Class>

这些只是示例,并不是真正的 XML。

主要问题是如何在不知道它有多少孩子的情况下遍历每个标签。我阅读了一些文章,但其中大多数仅针对特定级别。例如:

XmlNodeList nodes = root.SelectNodes("/ECClass");
foreach (XmlNode node in nodes)
{

}

我需要一次遍历每个标签,直到所有子标签都完成,以便我可以相应地映射新的 XMl。

提前感谢您的帮助。

【问题讨论】:

  • xdocument.root.Descendants() ?
  • 为什么有人想在 C# 中这样做?这是 XSLT 的工作。
  • 我不知道该怎么做。所以我在 C# 中尝试它。就像您指出的那样,@Henrik 还指出这可以使用 XSLT 来完成。我检查了一下,发现 XSLT 对这项工作真的很有帮助。非常感谢您的帮助。

标签: c# xml parsing


【解决方案1】:

要解析 c# 中的每个节点,您可以使用递归。只需将此函数传递给根节点

public void findAllNodes(XmlNode node)
{
    CreateNode(node.name);
    foreach (XmlNode n in node.ChildNodes)
        findAllNodes(n);
} 

你必须创建一个新的 xml 文件。你可以使用这样的东西:

XmlDocument xmlDoc = new XmlDocument();

然后实现 CreateNode 函数。应该是这样的:

public void CreateNode(string NodeName)
{
     if(NodeName == "something")
     {
         XmlNode rootNode = xmlDoc.CreateElement("something_else");
     }
     .....
}

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多