【问题标题】:Load XDocument into HTML unsorted list将 XDocument 加载到 HTML 未排序列表中
【发布时间】:2014-01-06 07:21:37
【问题描述】:

我正在尝试从XML file 加载Unsorted List

父标签必须加载到ul,子标签必须加载到ol

问题是,我无法单独获取父级,它总是打印父级值及其子级。


XML 文件:

<Sections>
  <Section id="D2F4CD35-FB7A-4E24-9CC3-7C2095D1A2D5">
    <![CDATA[ <PARENT 1> ]]>
    <SubSection>
      <![CDATA[ <CHILED 1.1> ]]>
    </SubSection>
    <SubSection>
      <![CDATA[ <CHILED 1.2> ]]>
    </SubSection>
  </Section>

  <Section  id="CF7F2212-A4DB-47AA-8129-61AF2F930C2C">
    <![CDATA[ <PARENT 2> ]]>
    <SubSection>
      <![CDATA[ <CHILED 2.1> ]]>
    </SubSection>
    <SubSection>
      <![CDATA[ <CHILED 2.2> ]]>
    </SubSection>
  </Section>
</Sections>

C#代码:

XDocument xmlDoc = XDocument.Load("C:/SectionXmlFile.xml");
    var parents = xmlDoc.Element("Sections");
    if (parents != null) {
        foreach (var parent in parents.Descendants("Section")) {    
            <ul>@parent.Value</ul>
            foreach (var child in parent.Descendants("SubSection")) {
                <ol>@child.Value</ol>
            }
        }
    }

结果:

<PARETN 1> <CHILED 1.1> <CHILED 1.2>

<CHILED 1.1>

<CHILED 1.2>

<PARETN 2> <CHILED 2.1> <CHILED 2.2>

<CHILED 2.1>

<CHILED 2.2>

预期结果:

<PARETN 1>

   <CHILED 1.1>

   <CHILED 1.2>

<PARETN 2>

   <CHILED 2.1>

   <CHILED 2.2>

【问题讨论】:

  • 为什么将实际结果和预期结果包含为图片?这使得重新格式化它们以使它们更具可读性是不可能的......
  • @JonSkeet 我现在会编辑它们,谢谢你的注意:)

标签: c# html xml asp.net-mvc-3 linq-to-xml


【解决方案1】:

我怀疑这是问题所在:

<ul>@parent.Value</ul>

这是关闭&lt;ul&gt; 标签,而不是包含其中的每个子元素。

您获得CHILED 元素两次的原因是您正在使用XElement.Value,它正在查找所有 父级下的文本节点。您只需要 立即 子文本节点。

我怀疑你可能想要:

foreach (var parent in parents.Descendants("Section")) {    
    <ul>@(parent.Nodes().OfType<XText>().First().Value)
    foreach (var child in parent.Descendants("SubSection")) {
        <ol>@child.Value</ol>
    }
    </ul>
}

(至少在概念上 - 剃刀语法可能略有偏差......)

这种找到第一个文本节点的方式无疑是相当烦人的。如果您可以更改您的 XML 以使其更容易(例如,使每个 Section 元素有一个 Title 元素,只有正确的标题文本,或其他)但如果失败,我认为您会留下像我一样的东西如上所述。

也不清楚为什么要开始新列表而不是列表items,但这是另一回事...

【讨论】:

  • 谢谢,我会按照您的建议尝试使用标题元素和列表项。我会看看会发生什么。无论如何,它总是给我这个错误。 “无法解析标签 ”。
  • @IbrahimSwaiss:啊 - 那将是 Razor 语法的问题,因为它不是一个标签,而是一个通用类型参数......根据另一个编辑了我的答案堆栈溢出答案...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2015-08-12
  • 2018-05-22
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多