【问题标题】:xpath to select based on one xml element but retrieve another element基于一个 xml 元素选择但检索另一个元素的 xpath
【发布时间】:2011-04-19 23:16:53
【问题描述】:

这是我必须使用的一些自动生成的 XML 中的一条记录的截断示例。

<marcrecord>
<marcdatafield tag="245" ind1="0" ind2="0">
      <marcsubfield code="a">Argumentation and advocacy :</marcsubfield>
      <marcsubfield code="b">the journal of the American Forensic Association.</marcsubfield>
    </marcdatafield>
    <marcdatafield tag="246" ind1="1" ind2="7">
      <marcsubfield code="a">Journal of the American Forensic Association</marcsubfield>
      <marcsubfield code="f">summer 1988-spring 1989</marcsubfield>
    </marcdatafield>
    <marcdatafield tag="246" ind1="3" ind2="">
      <marcsubfield code="a">Argumentation &amp; advocacy</marcsubfield>
    </marcdatafield>
    <marcdatafield tag="260" ind1="" ind2="">
      <marcsubfield code="a">[River Falls, WI] :</marcsubfield>
      <marcsubfield code="b">The Association,</marcsubfield>
      <marcsubfield code="c">[1988-</marcsubfield>
    </marcdatafield>
    <marcdatafield tag="300" ind1="" ind2="">
      <marcsubfield code="a">v. ;</marcsubfield>
      <marcsubfield code="c">26 cm.</marcsubfield>
    </marcdatafield>
    <marcdatafield tag="650" ind1="" ind2="0">
      <marcsubfield code="a">Forensics (Public speaking)</marcsubfield>
      <marcsubfield code="v">Periodicals.</marcsubfield>
    </marcdatafield>
    <marcdatafield tag="710" ind1="2" ind2="">
      <marcsubfield code="a">American Forensic Association.</marcsubfield>
    </marcdatafield>
    <marcdatafield tag="780" ind1="0" ind2="0">
      <marcsubfield code="a">American Forensic Association.</marcsubfield>
      <marcsubfield code="t">Journal of the American Forensic Association</marcsubfield>
      <marcsubfield code="x">0002-8533</marcsubfield>
      <marcsubfield code="w">(DLC)sf 80000452</marcsubfield>
      <marcsubfield code="w">(OCoLC)1479880</marcsubfield>
    </marcdatafield>
 <marcrecord>

我需要在标记为 780 的 marcdatafield 中显示数据(特别是编码为 t 的一个子字段)。要检索的特定 780 子字段基于在标记为 245 的数据字段的前一个子字段中找到匹配项(这是标题)

用户的标题搜索字符串位于名为 title 的变量中,下面的 XPath 似乎在根据标题匹配查找特定记录方面做得不错。

XPathExpression expr = xpath.compile("//marcdatafield[marcsubfield='" +title+ "']/*/text()");

但我不知道如何让它实际检索关联的 780 字段而不仅仅是标题字段。 (FWIW,这是使用本机 Java XPath 类,我将在 JSP 中使用它)

感谢您的帮助,

塞西

【问题讨论】:

  • 您能告诉我们您希望 xPath 选择什么吗?我无法理解您对您想要什么的解释。
  • 我想为标题变量获取用户输入并将其与以下值匹配:争论和倡导但我要检索的值在:美国法医协会。

标签: xml xpath


【解决方案1】:

我想你正在寻找这个:

//marcdatafield/marcsubfield[@code='t'][//marcdatafield[@tag='246']/marcsubfield[@code='a']/text()]

我假设您的意思是标签 246 子字段下的标题标记为 a,因为该标题匹配,而标签 245 子字段 b 下的标题不匹配。

这将使您的代码:

XPathExpression expr = xpath.compile("//marcdatafield/marcsubfield[@code='t'][//marcdatafield[marcsubfield='" +title+ "']/*/text()]");

【讨论】:

    【解决方案2】:

    试试这个例子:

    XPathFactory factory = XPathFactory.newInstance();
        XPath xPath = factory.newXPath();
        NodeList shows = (NodeList) xPath.evaluate("/schedule/show", new InputSource(new FileReader(
            "tds.xml")), XPathConstants.NODESET);
        for (int i = 0; i < shows.getLength(); i++) {
          Element show = (Element) shows.item(i);
          String guestName = xPath.evaluate("guest/name", show);
          String guestCredit = xPath.evaluate("guest/credit", show);
          System.out.println(show.getAttribute("weekday") + ", " + show.getAttribute("date") + " - "
              + guestName + " (" + guestCredit + ")");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2021-09-21
      • 2011-05-06
      相关资源
      最近更新 更多