微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从XMLReader获取元素偏移量

如何解决从XMLReader获取元素偏移量

| 今天早上大家好吗? 我正在编写一个程序来解析(几个)xml文件。 该程序的此阶段将集中于为桌面rpg(L5R)添加/编辑技能/学校/能力/等等。通过这个示例我学到的内容应该使我完成程序的其余部分。 因此,我已经使用XMLReader设置了xml阅读功能。我正在读取的文件看起来像...
<skills>
  <skill>
    <name>some name</name>
    <description>a skill</description>
    <type>high</type>
    <stat>perception</stat>
    <page>42</page>
    <availability>all</availability>
  </skill>
</skills>
我设置了一个保存数据的Skill类,以及一个读取数据的SkillEdit类,最终将拥有用于编辑和添加方法。 我目前能够正确阅读所有内容,但我认为由于描述的长度可能会有所不同,因此,一旦编写了编辑方法,确保没有数据被覆盖的最佳方法就是将编辑后的技能附加到文件末尾并清除其先前的条目。 为了使我做到这一点,我需要知道技能的文件偏移量在哪里,/技能的文件偏移量在哪里。我似乎找不到任何获得这些补偿的方法。 有没有办法做到这一点,或者你们可以建议一种更好的实施方式来编辑已经存在的技能?     

解决方法

        如果将XML读入LINQ to XML的
XDocument
(或
XElement
),一切将变得非常容易。您可以使用简单的界面读取,编辑,向XML文件添加内容等。 例如。,
var xmlStr = @\"<skills>
  <skill>
    <name>some name</name>
    <description>a skill</description>
    <type>high</type>
    <stat>perception</stat>
    <page>42</page>
    <availability>all</availability>
  </skill>
</skills>
\";
var doc = XDocument.Parse(xmlStr);

// find the skill \"some name\"
var mySkill = doc
    .Descendants(\"skill\") // out of all skills
    .Where(e => e.Element(\"name\").Value == \"some name\") // that has the element name \"some name\"
    .SingleOrDefault(); // select it
if (mySkill != null) // if found...
{
    var skillType = mySkill.Element(\"type\").Value; // read the type
    var skillPage = (int)mySkill.Element(\"page\"); // read the page (as an int)
    mySkill.Element(\"description\").Value = \"an AWESOME skill\"; // change the description
    // etc...
}
无需计算偏移量,手动,分步阅读或保持其他状态,这一切都为您服务。     ,        不要做!通常,由于可能存在的字符编码差异,实体引用,嵌入的注释以及许多其他可能导致物理层和逻辑层具有复杂关系的事情,您无法可靠地了解序列化XML中的物理偏移量。 如果XML仅位于文件系统上,则最安全的选择是在技能课程中有一个方法可以序列化为XML(您已经有一个方法可以读取XML),并在需要时重新序列化整个对象。     ,        泰勒 嗯,听起来好像您正在遭受教科书中过早优化的困扰……您是否已证明将完整技能列表与xml文件读写太慢了?没有?好吧,直到证明没有性能问题,对吗?因此,我们只编写最简单的代码即可工作(即按照我们想要的方式工作,而不必过多担心性能),然后直接继续进行下一个技巧功能的测试。 iff(它是if-and-only-if的缩写),我有一个经过验证的性能问题,那就是-then-only-then,然后,我考虑将每种技能都写到单个XML文件中,以避免不必要地重写可能很大的文件。每次修改一项技能时的技能列表...但这是“参考数据”,对吗?我的意思是您不会将(易失)游戏数据与XML文件反序列化,对吗?因为众所周知RDBMS在这项工作上要好得多,对吗?因此,您将不会经常重写此文件吗? 干杯。基思     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。