【问题标题】:Using XDocument with namespaces将 XDocument 与命名空间一起使用
【发布时间】:2012-01-11 13:55:21
【问题描述】:

我正在通过 XDocument 类读取 xmlfile。 XML 中有命名空间,如何将node.Element() 与命名空间一起使用?我尝试创建XNamespace,但它似乎不起作用..

XML如下:

<CueList time="2011-12-02T13:34:39" xmlns="urn:CueListSchema.xml" xmlns:s="urn:schemas-rcsworks-com:SongSchema" xmlns:n="urn:schemas-rcsworks-com:NoteSchema" xmlns:l="urn:schemas-rcsworks-com:LinkSchema" xmlns:t="urn:schemas-rcsworks-com:TrafficSchema" xmlns:p="urn:schemas-rcsworks-com:ProductSchema" xmlns:m="urn:schemas-rcsworks-com:MediaSchema" xmlns:w="urn:schemas-rcsworks-com:WebPageSchema" xmlns:ns="urn:CueListSchema.xml">
  <Event eventID="14" eventType="song" status="happening" scheduledTime="13:34:38" scheduledDuration="332.82">
    <s:Song title="Long Time Coming (Holding On)" internalID="007700028007AD480000">
      <s:Artist name="The Winans" sequenceNumber="1" internalID="0067000180002B020000" sortName="Winans, The" />
      <m:Media ID="{7C734B6C-7AF7-4998-8366-F1F11F5D56D7}" runTime="332.82" fileName="{7C734B6C-7AF7-4998-8366-F1F11F5D56D7}.wav" />
    </s:Song>
  </Event>
  <Event eventID="15" eventType="link" status="committed" startTime="13:40:10" scheduledDuration="3.49">
    <l:Link title="PG MFL DRY FEMALE" internalID="007B00028002DAEA0000">
      <m:Media ID="{036BB0ED-3130-4AD0-8BAF-E5D0FBA7DC3B}" runTime="3.49" fileName="{036BB0ED-3130-4AD0-8BAF-E5D0FBA7DC3B}.wav" />
    </l:Link>
  </Event>
  <Event eventID="16" eventType="song" status="committed" startTime="13:40:10" scheduledDuration="303.55">
    <s:Song title="Not Making Sense, Making Faith" internalID="007700028009377F0000">
      <s:Artist name="Donald Lawrence" sequenceNumber="1" internalID="006700018000308A0000" sortName="Lawrence, Donald" />
      <m:Media ID="{B6FD04EA-9B42-4E6A-AC80-A26BF65E6F11}" runTime="303.55" fileName="{B6FD04EA-9B42-4E6A-AC80-A26BF65E6F11}.wav" />
    </s:Song>
  </Event>
</CueList>

我正在从foreach 中的节点循环,并希望获得s:Song 节点。

【问题讨论】:

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


    【解决方案1】:

    使用 XNamespace 及其加法运算符重载的 LINQ to XML 非常简单:

    XNamespace ns = "urn:schemas-rcsworks-com:SongSchema";
    for (var songElement = doc.Descendants(ns + "Song"))
    {
        ...
    }
    

    命名空间的简单处理是 LINQ to XML 最漂亮的方面之一。

    【讨论】:

    • 谢谢,我可以看到这应该可以使用,是否可以使用 node.Element(ns + "song") - 因为当我这样做时会出错......
    • @LukeWilkinson:是的,应该没问题。您所说的“错误”是什么意思?请具体。
    • 抱歉 - 对象引用未设置为对象的实例。
    • @LukeWilkinson:这表明node 为空。
    • “LINQ to XML 最漂亮的方面之一。”你是认真的吗 ?我个人觉得这一切都很糟糕
    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 2021-08-26
    • 1970-01-01
    • 2014-10-13
    • 2014-09-23
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多