阅读一些xml行时,我遇到了XPathSelectElement的问题。

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

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


childList有两个元素(两个XML行,我希望它们具有)
然后,我可以在Debugger中看到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>

最佳答案

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

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

关于c# - C#-Linq-XPathSelectElement每次都返回相同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10699654/

10-09 05:54