簡體   English   中英

如何根據同級xml節點中同級節點中的文本值查找文本?

[英]How do I find the text of a sibling xml node based on the text value in its sibling node?

鑒於:

<param>
<data>
    <value><string>ErrorCode</string></value>
    <value><string>200</string></value>
</data>
<data>
    <value><string>Desc</string></value>
    <value><string>Age group</string></value>
</data>
</param>

我該如何構造一個xpath來返回文本值為200的節點/param/data/value/string 基本上我只想搜索同級./value/string文本之一包含ErrorCode同級value元素?

您應該使用以下XPath表達式:

/param/data/value/string[../preceding-sibling::value[string='ErrorCode']|../following-sibling::value[string='ErrorCode']]

如果值的順序始終相同,則可以刪除並運算符並僅使用謂詞的一部分。

對於那些感興趣的人,我有非常相似的需求,並且必須做些微的不同。

如果同一節點內的兄弟姐妹基於另一個兄弟姐妹,則需要獲取值。 因此,在下面的示例中,我需要根據特定的gameId獲取抽獎編號

XML:

<InitResponse>
  <LottoToken>908ec70b308adf10d04db1478ef9b01b</LottoToken>
  <GameInfoList>
    <GameInfo>
      <Draw>
        <gameId>L649</gameId>
        <draw>3035</draw>
      </Draw>
    </GameInfo>
    <GameInfo>
      <Draw>
        <gameId>BC49</gameId>
        <draw>2199</draw>
      </Draw>
    </GameInfo>
  </GameInfoList>
</InitResponse>

我需要使用以下語法。 它可以在多個在線xPath評估器中使用,但是我在C#中遇到了麻煩,不得不使用其他方法。

/InitResponse/GameInfoList/GameInfo/Draw/draw[preceding-sibling::gameId='L649']

C#版本:

string s = @"
<param>
<data>
    <value><string>ErrorCode</string></value>
    <value><string>200</string></value>
</data>
<data>
    <value><string>Desc</string></value>
    <value><string>Age group</string></value>
</data>
</param>";

XDocument xdoc = XDocument.Parse(s);

foreach (var elem in xdoc.XPathSelectElements("/param/data/value[string='ErrorCode']"))
{
    XName value = XName.Get("value");
    foreach (var res in elem.ElementsBeforeSelf(value).Union(elem.ElementsAfterSelf(value)).Select(el => el.XPathSelectElement("string").Value))
        Console.WriteLine(res);
}

嘗試以下Xpath

//param/data/value[string='ErrorCode']/following-sibling::value/string | //param/data/value[string='ErrorCode']/preceding-sibling::value/string 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM