【问题标题】:Parsing XML in D在 D 中解析 XML
【发布时间】:2012-03-19 23:17:09
【问题描述】:

我正在尝试解析一个 XML 文档,该文档存储我的 2D 游戏中的地图数据。我试图一步一步来,我已经加载了文件,创建了一个新的文档解析器,并选择了一个我想要提取的开始标签和属性。但是,当我检查属性的值应该是什么时(25),结果为零。告诉我我遗漏了一些东西并且它没有提取 XML 值。

这是正在解析的 XML 文件:http://pastebin.com/tpUU1Wtv

    void LoadMap(string filename)
{
    enforce( filename != "" , "Filename is invalid!" );

    xmlData = cast(string) read(filename);

    enforce( xmlData != "", "Read file Failed!" );

}

void ParseMap()
{
    auto xml = new DocumentParser(xmlData);

    xml.onStartTag["map"] = (ElementParser e)
    {
        mapWidth = to!int(e.tag.attr["width"]);
    };
    xml.parse();
    writeln("Map Width: ", mapWidth);
}

【问题讨论】:

  • 如果你不转换为int e.tag.attr["width"] 持有什么(还有其他什么属性)
  • 就 writeln 而言,它包含一个空字符串。在地图标签下:
  • 也许添加“e.parse();”在“mapWidth = ...”行之后?如dlang.org/phobos/std_xml.html

标签: xml d


【解决方案1】:

当前的 xml 模块似乎有点问题,我相信正在研究替代方案。

您的代码不起作用的原因是由于某种原因解析器忽略了外部封闭标记。在你的情况下是“地图”。如果您将地图标签包装在一个虚拟标签中,那么它会突然起作用。

<dummy>
   <map...>
    ...
   </map>
</dummy>

【讨论】:

  • 替代方案(可能会成为 std.xml2)位于此处:dsource.org/projects/xmlp 使用它可能比解决 std.xml 中的错误更令人沮丧。
  • 2017,现在 std.xml 仍然有问题,所以只有我不相信。
【解决方案2】:

是否可以选择使用 YAML? D-YAML?

【讨论】:

  • 我不确定那是什么。由于 fwend 所说的错误,我最终使用了自定义 XML 库。
  • YAML 不是标记语言。这是一个很好的、人类和机器可读的 XML 替代方案
猜你喜欢
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2012-02-18
  • 2014-05-13
  • 2016-10-31
  • 2015-12-25
  • 2012-02-07
  • 2010-12-02
相关资源
最近更新 更多