【问题标题】:xml child element node or attribute valuexml 子元素节点或属性值
【发布时间】:2019-01-11 04:13:54
【问题描述】:

我有一个带有嵌套 xml 元素的 xml 架构,下面是其中的一小部分

<aa>
    <id extension="xx" root="56" />
    <name>demo</name>
    <telecom use="emer" value="tel:34444" />
</aa>

<bb>
   <value value="12345" />
</bb>
<cc>
   <value value="234567" />
</cc>

由此,我必须得到“aa tag”下“name tag”的值,telecom tag 的最后一个属性(tel:),以及“value tag”的属性值(在 bb tag 和cc 标签)

我尝试了以下代码,但它并没有完全符合我的预期。

xDoc.Descendants().Where(x => x.Name.LocalName.Equals("aa")
                              || x.Name.LocalName.Equals("telecom") && 
                              (x.FirstAttribute.Equals("EC")
                               || x.Name.LocalName.Equals("bb")
                               || x.Name.LocalName.Equals("cc"))

请提供此问题的解决方案。

【问题讨论】:

  • 这是您的架构吗?可以改变吗?将 tel 属性作为 value 属性的一部分很困难。你能准确地编辑你希望得到的结果吗?
  • 感谢回复,这不是我的架构,我会在访问服务时获取此架构
  • 您能否解释并发布一个示例,说明您要选择的确切内容?你想从你的代码中得到什么?
  • 我有一个 ListCollection 来从我想要加载的这个 xml 中获取值(“12345”来自 bb-value 标签,“234567”来自 cc-value 标签,name-tag 值“demo” , 电信最后一个属性值 (tel:34444)
  • @SiddarthVarunesh,你能发布确切的 xml 吗?

标签: c# xml linq-to-xml xdoc


【解决方案1】:

您需要选择每个值的适当后代,然后通过使用适当的 linq 查询,您可以选择所需的值

class Program
{
    public static void Main(string[] args)
    {
        XDocument doc = XDocument.Load(@"Path to your xml file");

        var name = doc.Descendants("organisation").Elements().Where(x => x.Name == "name").Select(x => (string)x).FirstOrDefault();
        var tel = doc.Descendants("organisation").Elements().Where(x => x.Name == "telecom").Select(x => x.Attribute("value").Value).FirstOrDefault();
        var bb_value = doc.Descendants("startdate").Elements().Where(x => x.Name == "value").Select(x => x.Attribute("value").Value).FirstOrDefault();
        var cc_value = doc.Descendants("enddate").Elements().Where(x => x.Name == "value").Select(x => x.Attribute("value").Value).FirstOrDefault();

        Console.WriteLine($"name: {name} \ntel: {tel} \nbb_value: {bb_value} \ncc_value: {cc_value}");
        Console.ReadLine();
    }
}

输出:

【讨论】:

  • 只要我的回答对您有帮助,您就可以在回答左侧打勾,使其变为绿色 :)
  • 嗨试过这个,但我返回空值,以下是我的实际架构将看起来像(由于机密而编辑)demo
  • 您最新提供的 xml 格式不正确意味着缺少关闭节点,但无论如何我更新了我的答案,所以只需尝试将 aa 替换为 organisationbbstartdate 和 @ 987654328@ 和enddate 在我的回答中。仔细查看答案,我更新了它。并让我知道:)
  • 我没有收到您的任何回复。我的回答解决了你的问题吗?如果是,则标记答案左侧的勾号使其变为绿色,否则我将删除此答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多