【问题标题】:Retrieve from a particular level in xml tree从 xml 树中的特定级别检索
【发布时间】:2013-03-18 17:14:29
【问题描述】:

我的决策树结构如下所示,

<?xml version="1.0" encoding="utf-8" ?>
<root>
  outlook
  <item>
    sunny
    <root>
      humidity
      <item>
        high
        <leaf>no</leaf>
      </item>
      <item>
        normal
        <leaf>yes</leaf>
      </item>
    </root>
  </item>
  <item>
    overcast
  <leaf>yes</leaf>
  </item>
  <item>
    rain
    <root>
      wind
      <item>
        weak
        <leaf>yes</leaf>
      </item>
      <item>
        strong
        <leaf>no</leaf>
      </item>
    </root>
  </item>
</root>

我想要一个 LINQ 查询,它会显示,

Outlook : Sunny , Overcast , Rain 

即根值加上树的第一级子值。再次选择一个特定的项目,如 晴天

它必须迭代地给出其连续的根值和根的第一级子级。也就是说,

Humidity : High , Normal

最后做出决定,是或否。 我也在做同样的事情,但一些意见会进一步帮助我。

【问题讨论】:

  • 那个 XML 的结构似乎不是很好。只有在您的数据是半结构化的情况下(例如带有某种格式的文本),才应使用混合内容。不要将混合内容用于完全结构化的数据。你能改变那个 XML 的结构吗?

标签: linq xml-parsing linq-to-xml decision-tree


【解决方案1】:

您可以尝试以下方法吗:

var doc = XDocument.Parse(xml);
foreach (var r in doc.Descendants("root"))
{
    var values = r.Elements("item").Select(s => (s.FirstNode as XText).Value.Trim()).ToList();
    string.Concat((r.FirstNode as XText).Value.Trim(), ": ", string.Join(",", values)).Dump("decision");
}

这是我得到的输出:

decision 
outlook: sunny,overcast,rain 

decision 
humidity: high,normal 

decision 
wind: weak,strong 

我使用了 LinqPad,因此使用了 Dump 方法调用,它将输出输出到 LinqPad 控制台。希望这会有所帮助。

【讨论】:

  • Thnx 很多.. 但这并不能解决我的问题。由于我指出为决策树,因此我将无法到达叶子或传递动态选择遍历路径的参数。无论如何,你的回答对我有帮助。
  • 如果您将决策的内容描述得更清楚一点,即。进出,或业务逻辑,然后我可以将上述内容包装在方法调用中,以准确返回您所追求的。由于决策的“方式”尚不清楚,我为您提供了一种通用方式,展示了如何实现 XML 遍历以帮助实现您的目标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多