【问题标题】:Transforming one XML document into another with C++使用 C++ 将一个 XML 文档转换为另一个
【发布时间】:2012-09-10 19:56:29
【问题描述】:

将源 XML 文档转换为目标 XML 文档的直接方法是什么。源和目标之间只有很小的区别:具体来说,我想删除每个UnitIDGroup-Node 中的第一个UnitIDRecord-Node。

  • 此任务 DOM 或 SAX 的合适模型是什么?
  • 哪种 XML 库最适合这个问题(它保证源和目标仅在删除的节点上有所不同,没有丢失命名空间、属性、编码......)?
  • 我读到了XSLT,这可能是一个选择吗?

XML 文档如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<ExPostInformationRealGeneration xmlns="http://schemas.seven2one.de/EEX/TransparencyPlatform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.seven2one.de/EEX/TransparencyPlatform EEXTransparencyPlatform.xsd">
    <DispatcherID>XYZ</DispatcherID>
    <CreationDateTime>2012-05-22T13:57:00Z</CreationDateTime>
    <MessageText>1 - Positiv - Meldung mit Quality-Tag - L000</MessageText>
    <UnitIDGroup>
        <UnitID>E110200-001</UnitID>
        <UnitIDRecord><Quantity>16.9</Quantity><Starttime>2008-04-30T22:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
        <UnitIDRecord><Quantity>16.6</Quantity><Starttime>2008-04-30T23:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
        <UnitIDRecord><Quantity>16.4</Quantity><Starttime>2008-05-01T00:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
    </UnitIDGroup>
    <UnitIDGroup>
        <UnitID>E110200-002</UnitID>
        <UnitIDRecord><Quantity>16.9</Quantity><Starttime>2008-04-30T22:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
        <UnitIDRecord><Quantity>16.6</Quantity><Starttime>2008-04-30T23:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
        <UnitIDRecord><Quantity>16.4</Quantity><Starttime>2008-05-01T00:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
    </UnitIDGroup>
    <UnitIDGroup>
        <UnitID>E110201-001</UnitID>
        <UnitIDRecord><Quantity>7.0</Quantity><Starttime>2008-04-30T22:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
        <UnitIDRecord><Quantity>7.1</Quantity><Starttime>2008-04-30T23:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
        <UnitIDRecord><Quantity>7.1</Quantity><Starttime>2008-05-01T00:00:00Z</Starttime><Period>PT1H</Period><MessageText></MessageText></UnitIDRecord>
    </UnitIDGroup>
    <!-- other UnitIDGroup elements -->
</ExPostInformationRealGeneration>

【问题讨论】:

  • 问:我阅读了有关 XSLT 的信息,这可以作为一个选项吗?答:是的。事实上,这可能是 preferred 选项 :) 如果你碰巧在 Windows 上,这里有一个很好的教程:msdn.microsoft.com/en-us/library/windows/desktop/…
  • 它应该发生在 Windows 上,谢谢你的教程。看来,我可以从链接中获取示例,剩下的就是编写适当的 XSL 文件(希望这不是太难:-)。

标签: c++ xml xslt


【解决方案1】:

如果它符合您的条件,我会考虑将文件作为字符串读取并将字符串写入另一个文件的可能性。这是一个 5 行程序,避免了任何解析等。它将运行快速且简单。但是,它是针对这个问题的,不能重用。因此,我将此作为建议而不是正确的解决方案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多