【问题标题】:C# - Linq - XPathSelectElement returns the same results everytimesC# - Linq - XPathSelectElement 每次都返回相同的结果
【发布时间】:2012-05-28 19:17:23
【问题描述】:

我在读取一些 xml 行时遇到了 XPathSelectElement 问题......

函数 handleEachSession 从我的另一个函数的数学 childList.ForEach() 中调用了两次:

private void handleMonitorResponse(XElement receivedSessions)
 {
 List<XElement> childList = receivedSessions.Elements().ToList();
 childList.ForEach(handleEachSession);

childList 有两个元素(两条 XML 行,我希望它拥有的那些) 然后我可以在调试器中看到,handleEachSession() 的两个调用都获得了正确的 XElement 会话。这两个我想要它。

现在有这些 XPathSelectElement。它适用于第一次通话,但不适用于第二次通话。 我第二次获得新的 XElement 会话,但 XPathSelectElement 仍然返回第一次调用的旧值。 哼!??我无法理解这种行为。

private void handleEachSession(XElement session)
 {
 XElement receivedSessionId = session.XPathSelectElement("//sessionId");
 XElement receivedQuality = session.XPathSelectElement("//quality");
 XElement receivedContentStatus = session.XPathSelectElement("//contentStatus");
…

谁能帮帮我?

XML 是:

receivedSessions = 
<sessions type="array">
  <item type="object">
    <sessionId type="string">8c86716a87</sessionId>
    <quality type="string">mid</quality>
    <addressUri type="string">http://192.168.6.234/media/SorrowPinkFloyd_.mp4</addressUri>
    <currentTime type="number">1.5542887</currentTime>
    <contentStatus type="string">paused</contentStatus>
  </item>
  <item type="object">
    <sessionId type="string">c795067c4e</sessionId>
    <quality type="string">mid</quality>
    <addressUri type="string">http://192.168.6.234/media/trailer.mp4</addressUri>
    <currentTime type="number">3.3492105</currentTime>
    <contentStatus type="string">playing</contentStatus>
  </item>
</sessions>

session = (first call)
<item type="object">
  <sessionId type="string">8c86716a87</sessionId>
  <quality type="string">mid</quality>
  <addressUri type="string">http://192.168.6.234/media/SorrowPinkFloyd_.mp4</addressUri>
  <currentTime type="number">1.5542887</currentTime>
  <contentStatus type="string">paused</contentStatus>
</item>

session = (second call)
<item type="object">
  <sessionId type="string">c795067c4e</sessionId>
  <quality type="string">mid</quality>
  <addressUri type="string">http://192.168.6.234/media/trailer.mp4</addressUri>
  <currentTime type="number">3.3492105</currentTime>
  <contentStatus type="string">playing</contentStatus>
</item>

【问题讨论】:

  • 请包含 XML(一个足够但简短的片段)。

标签: c# linq


【解决方案1】:

根据xpath-syntax,双斜杠(//)表示:从当前节点中选择文档中匹配选择的节点,无论它们在哪里。 所以考虑到这一点,您可能必须将 handleEachSession 函数更改为

private void handleEachSession(XElement session)
{
    XElement receivedSessionId = session.XPathSelectElement("sessionId");
    XElement receivedQuality = session.XPathSelectElement("quality");
    XElement receivedContentStatus = session.XPathSelectElement("contentStatus");
}

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多