【问题标题】:Accessing nested XML - going upwards访问嵌套的 XML - 向上
【发布时间】:2022-11-10 22:05:36
【问题描述】:

如果给出了Detail ID = "5",我如何找到Item No = "0002"

const Detail_id= "5";

let xRes = xmlDoc.evaluate(`//Item/Details/Detail[@Id="${Detail_id}"]`, 
xmlDoc.documentElement);

我现在如何向上查找Item No = "0002"

<xml>
  <Items>
    <Item No="0001">
      <Details>
        <Detail Id="3">
          <Colors>
            <Color colorName="green" />
            <Color colorName="yellow" />
          </Colors>
        </Detail>
      </Details>
    </Item>
    <Item No="0002">
      <Details>
        <Detail Id="5">
          <Colors>
            <Color colorName="purple" />
            <Color colorName="pink" />
          </Colors>
        </Detail>
        <Detail Id="6">
          <Colors>
            <Color colorName="grey" />
            <Color colorName="orange" />
          </Colors>
        </Detail>
      </Details>
    </Item>
  </Items>
</xml>

下面的代码工作正常。为了向下。下面给出了&lt;Item No="0002"&gt; 的所有详细信息。像 Detail Ids 和 colorNames

const SEARCH_NO = "0002";

let xRes = xmlDoc.evaluate(`//Item[@No="${SEARCH_NO}"]`, xmlDoc.documentElement);
const foundNode = xRes.iterateNext();
if (foundNode) {
  xRes = xmlDoc.evaluate('Details/Detail', foundNode);
  let detailNode;
  while ( !!( detailNode = xRes.iterateNext() ) ) {
    const li = showDetail(detailNode.getAttribute("Id"));
    const colXres = xmlDoc.evaluate('Colors/Color/@colorName', detailNode);
    let colorTextNode;
    while ( !!( colorTextNode = colXres.iterateNext() ) ) {
      showColor(li, colorTextNode.textContent);
    }
  }
}

【问题讨论】:

    标签: javascript xml xpath


    【解决方案1】:

    选择目标Detail 后,不要“向上”,而是通过向其添加谓词来调整您的XPath 以直接选择目标Item

    改变

    //Item/Details/Detail[@Id="${Detail_id}"]
    

    //Item[@No="${SEARCH_NO}" and Details/Detail/@Id="${Detail_id}"]
    

    或者,如果您不知道SEARCH_NO 并且只想找到目标DetailItem 祖先,

    //Item[Details/Detail/@Id="${Detail_id}"]
    

    来自 cmets:

    是的,我需要找到 search_no。

    然后

    //Item[Details/Detail/@Id="${Detail_id}"]/@No
    

    也可以看看

    【讨论】:

    • 是的,我需要找到 search_no。谢谢你的回答。我会检查并告诉你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多