xml解析-代码重构问题

2024-02-01

我有以下 xml:

<?xml version="1.0" encoding="utf-8"?>
<RootData>
  <PassResult>
  <FirstOne>P1</FirstOne>
  <SecondOne>P2</SecondOne>
 <IsMale>false</IsMale>
</PassResult>
<TestResult>
  <MarkOne>100</MarkOne>
  <MarkTwo>50</MarkTwo>
  <Slope>30</Slope>
</TestResult>
<ToneTestResult>
  <TotalTime>2</TotalTime>
  <CorrectPercentage>90</CorrectPercentage>
</ToneTestResult>
<QuestionnaireResult Version="1">
  <Question Id="50">
   <Answer Id="B" />
 </Question>
  <Question Id="60">
   <Answer Id="A" />
 </Question>
 </QuestionnaireResult>
</RootData>

我有下面的代码,看起来一点都不好。很多重复的链接查询。 如何以更结构化的方式重构此代码来填充“OutputData”对象。我现在不想将其更改为 XmlSerializer:-(。

示例代码:

    // Gets the root element decendants
        var elementRootData = xDocument.Descendants("RootData");

        var xElements = elementRootData as IList<XElement> ?? elementRootData.ToList();


   // Read first leaf node "ProfileResult"
        var passResult = from xElement in xElements.Descendants("PassResult")
            select new
            {

                FirstOne = xElement.Element("FirstOne").GetValue(),
                SecondOne = xElement.Element("SecondOne").GetValue(),
                IsMale = xElement.Element("IsMale").GetValue()
            };


    // Read second leaf note
        var testResult = from xElement in xElements.Descendants("TestResult")
            select new
            {

                MarkOne = xElement.Element("MarkOne").GetValue(),
                MarkTwo = xElement.Element("MarkTwo").GetValue(),
                Slope = xElement.Element("Slope").GetValue()
            };


    // Update OutputData object
        var parseOutputData = new OutputData();

    foreach (var result in passResult)
        {
            parseOutputData.FirstOne = result.FirstOne;
            parseOutputData.SecondOne = result.SecondOne;
            parseOutputData.IsMale = result.IsMale.Equals("True");
        }

        foreach (var result in testResult)
        {
            parseOutputData.MarkOne = double.Parse(result.MarkOne);
            parseOutputData.MarkTwo = double.Parse(result.MarkTwo);
            parseOutputData.Slope = double.Parse(result.Slope);
        }

我必须编写更多这样的代码来填充其他元素数据,例如 ToneTestResult、QuestionnaireResult 等。 有人可以建议示例代码吗?

此致,


鉴于您的 XML 很小,您可能不必太担心性能。您可以利用内置的显式转换一次性完成整个事情:

var data = new OutputData
{
    FirstOne = (string) doc.Descendants("FirstOne").Single(),
    SecondOne = (string) doc.Descendants("SecondOne").Single(),
    IsMale = (bool) doc.Descendants("IsMale").Single(),
    MarkOne = (double) doc.Descendants("MarkOne").Single(),
    MarkTwo = (double) doc.Descendants("MarkTwo").Single(),
    Slope = (double) doc.Descendants("Slope").Single()
};

作为旁白,Descendants永远不会返回任何实现IList<XElement>,所以你绝对可以删除它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xml解析-代码重构问题 的相关文章

随机推荐

  • 尝试将 log 方法应用于 Python 中的 pandas dataframe 列时出错

    所以 我对 Python 和 Pandas 以及一般编程 非常陌生 但在一个看似简单的函数上遇到了麻烦 因此 我使用通过 SQL 查询提取的数据创建了以下数据框 如果您需要查看 SQL 查询 请告诉我 我将粘贴它 spydata pd Da
  • .NET 跟踪文件不起作用

    我正在尝试使用指向文件位置的 TextWriterTraceListener 来跟踪 Windows 窗体应用程序中发生的奇怪事情 我对其进行了设置 以便应用程序第一次需要在程序运行期间跟踪某些内容时 它会创建跟踪侦听器并注册它 但是 跟踪
  • 使用 Mod_rewrite 将 HTTP 重定向到 HTTPS

    我需要重定向自http test glad redirect TO https test glad start do 主要问题是我需要维护请求中的 POST 参数 我无法使用标准 http 重定向来执行此操作 因为 POST 参数不会按照
  • Git Rebase 期间的 Git Commit - 到底发生了什么?

    我正在寻找一个很好的描述 说明如果在变基期间提交会发生什么 以及如何以一种简单的方式 恢复 这一情况 让我们考虑一个场景 其中一个大型提交被重新设定 在变基期间出现冲突 用户开始合并更改 现在 想象一下这样一个场景 你快完成了 但你没有打电
  • igraph中的社区检测算法有什么区别?

    我有一个大约 100 个 igraph 对象的列表 其中一个典型对象具有大约 700 个顶点和 3500 个边 我想确定其中更有可能存在联系的顶点组 我的计划是使用混合模型来使用顶点和组属性来预测有多少组内联系顶点 有些人可能想对我的项目的
  • 区分 UITableView 编辑状态?

    我一直在尝试区分 UITableView 中的编辑状态 我只需要在点击编辑按钮后处于编辑模式时调用一个方法 因此当您滑入单元格时 您会看到小圆形删除图标 但当用户滑动删除时则不会 无论如何我可以区分两者吗 Thanks EDIT 感谢罗德里
  • 导航栏,标题位于中心,按钮位于右侧

    因此 我尝试创建一个导航栏 其标题位于中心 按钮显示在右侧 正如您所看到的 当我尝试执行此操作时 按钮出现在下一行并位于 div 之外 Fiddle https jsfiddle net ck18vjpn 1 title bar backg
  • 如何声明/忽略缺失的 JSX 类型?

    我想使用SVG use element https developer mozilla org en US docs Web SVG Element use in a tsx file
  • 如何解压方法参数来为其分配类属性?

    我经常做这样的事情 class Box def init self some setup stuff def configure self color ffffff weight 1 empathy 97 angle x 0 angle y
  • 使用 Glide 库显示模糊图像

    我正在尝试使用显示模糊图像Glide而是显示错误图像 我不知道为什么显示错误图像 URL工作正常 但仍然仅显示错误图像 这是我的代码 Glide with context load http www gadgetsaint com wp c
  • 如何解决此错误 命令 PhaseScriptExecution 失败并出现非零退出代码

    I hade changed my Mac to MacBook m1 and my Xcode V is 12 4 my project run normally on simulator but doesn t on the real
  • 如何从列表中删除整数? [复制]

    这个问题在这里已经有答案了 我需要从整数数组列表中删除整数 我对字符串和其他对象没有问题 但是当我删除时 整数被视为索引而不是对象 List
  • 使用 d3.js 绘制半实心圆

    我正在尝试用 d3 js 创建一个半实心圆 就像this http www indezine com products powerpoint learn shapes images halfcirles2010 8 jpg 我没有找到任何如
  • 如何捕获 Javascript 中的 404 错误?

    我有一个 HTML 音频元素 并且我将该元素的 src 属性动态设置为存储在局域网上的音频文件 它是这样工作的 function setSource source audio src source var audio new Audio v
  • 如何在 C 中使用 printf() 和 scanf() 而不进入下一行?

    我想在一行中获取出生日期 include
  • 删除重复的尾部斜杠

    我想检测php如果一个字符串像 string包括重复的尾部斜杠 例如 string http somepage com something some html to string http somepage com something so
  • 在 iOS 上使用 Cordova 1.6 设置外部起始页

    是否可以加载外部index html 包含cordova js 而不是本地index html 我在 appdelegate m 中找到了这段代码 self viewController wwwFolderName www self vie
  • 如何在 NodeJs 中安排 Google 会议并获取会议链接?

    在我的项目中 我必须在给定时间在两个用户之间安排一次谷歌会议 我在 NodeJS 中拥有其电子邮件 ID 有人能帮我解决这个问题吗 您将需要使用谷歌日历API https developers google com calendar api
  • 使用 BlueSnap 托管支付字段轻松开始;

    您好 我正在寻找一个可以复制并粘贴到我的网站中的简单脚本 以便我可以开始使用 BlueSnap 的 HPF 字段进行销售 该表单应包括取回代币并向购物者收费所需的最基本元素 我不是在寻找任何设计 只是在寻找功能 我有基础知识 但我需要看看如
  • xml解析-代码重构问题

    我有以下 xml