1

いくつかのxml行を読んでいるときにXPathSelectElementに問題があります....

関数 handleEachSession は、他の関数の計算法 childList.ForEach() から 2 回呼び出されます。

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

childList には 2 つの要素があります (2 つの XML 行、必要な要素です) 次に、デバッガーで、handleEachSession() の両方の呼び出しが正しい XElement セッションを取得することを確認できます。持っておきたい2本。

現在、これらの XPathSelectElement があります。最初の呼び出しでは機能しますが、2 番目の呼び出しでは機能しません。2 回目に新しい 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>
4

1 に答える 1

8

xpath-syntaxによると、二重スラッシュ (//) は次のことを意味します。現在のノードから、ドキュメント内のノードがどこにあっても、選択に一致するノードを選択します。それを念頭に置いて、おそらくhandleEachSession関数を次のように変更する必要があります

private void handleEachSession(XElement session)
{
    XElement receivedSessionId = session.XPathSelectElement("sessionId");
    XElement receivedQuality = session.XPathSelectElement("quality");
    XElement receivedContentStatus = session.XPathSelectElement("contentStatus");
}
于 2012-05-22T10:06:12.963 に答える