当前位置: 首页 > 知识库问答 >
问题:

按路径获取XML节点

颛孙昆
2023-03-14

我有以下(很大=

<Hotels>
  <Hotel>
    <Name>Hotel 1</Name>
    <City>City 1</City>
    <Phone>12345</Phone>
  </Hotel>
  <Hotel>
    <Name>Hotel 2</Name>
    <City>City 2</City>
    <Phone>67890</Phone>
  </Hotel>
  ...
</Hotels>

我有一个文件,它定义了我要提取的字段及其路径:

$root = "/Hotels/Hotel";
$fields = array("HotelName"   => "/Name",
                "PhoneNumber" => "/Phone");

因此,HotelName的路径是:/酒店/酒店/名称

现在我想了解每家酒店的信息。我无法为它们创建类(如这里),因为脚本必须是动态的,并且将传递具有不同定义文件的不同XML文件。

我如何通过使用路径来解决这个问题,没有类,内存使用率低(=

//编辑:一切都已实现。我只需要一种方法来遍历酒店,并使用我拥有的路径获取它们的值。

共有2个答案

呼延英奕
2023-03-14

如果您已经找到<代码>

  • XPath:<代码>/名称或更短的名称(只是不要以引用根的开头),而是确保使用酒店节点作为查询上下文;或
马渊
2023-03-14

尝试阅读本教程,这里有一些解释和示例。http://viralpatel.net/blogs/java-xml-xpath-tutorial-parse-xml/

对于你的porpuse,你应该使用Stax family的东西,而不是DOM。

尝试这样做

public class QueryXML {
  public void query() throws ParserConfigurationException, SAXException,
      IOException, XPathExpressionException {
    // standard for reading an XML file
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder;
    Document doc = null;
    XPathExpression expr = null;
    builder = factory.newDocumentBuilder();
    doc = builder.parse("person.xml");

    // create an XPathFactory
    XPathFactory xFactory = XPathFactory.newInstance();

    // create an XPath object
    XPath xpath = xFactory.newXPath();

    // compile the XPath expression
    expr = xpath.compile("//person[firstname='Lars']/lastname/text()");
    // run the query and get a nodeset
    Object result = expr.evaluate(doc, XPathConstants.NODESET);

    // cast the result to a DOM NodeList
    NodeList nodes = (NodeList) result;
    for (int i=0; i<nodes.getLength();i++){
      System.out.println(nodes.item(i).getNodeValue());
    }

    // new XPath expression to get the number of people with name Lars
    expr = xpath.compile("count(//person[firstname='Lars'])");
    // run the query and get the number of nodes
    Double number = (Double) expr.evaluate(doc, XPathConstants.NUMBER);
    System.out.println("Number of objects " +number);

    // do we have more than 2 people with name Lars?
    expr = xpath.compile("count(//person[firstname='Lars']) >2");
    // run the query and get the number of nodes
    Boolean check = (Boolean) expr.evaluate(doc, XPathConstants.BOOLEAN);
    System.out.println(check);
  }

您可以简单地使该代码适应您的需求。

 类似资料:
  • 有没有可能在postgres中做这样的事情: 错误:运算符不存在:jsonb#>TEXT 没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。

  • 在本章中,将学习如何获取XML DOM对象的节点值。 XML文档具有称为节点的信息单元的层次结构。 对象有一个属性 - ,它返回元素的值。 在以下部分中,将讨论学习 - 获取元素的节点值 获取节点的属性值 以下所有示例中使用的node.xml如下所示 - 1. 获取节点值 使用方法以文档顺序返回具有给定标记名称的所有元素的。 示例 以下示例(getnode example.html)将XML文档(

  • 问题内容: 您如何获取到对象的给定子节点的JSON路径? 例如: 给出了一个引用key4的变量。现在,我正在寻找绝对路径: 有什么办法可以在JS中完成这项工作吗? 先感谢您。 问题答案: 因此,您有一个值为“ key3”的变量,并且您想知道如何基于此字符串的值动态访问此属性? 编辑 哇,我不敢相信我是第一次尝试。其中可能存在一些错误,但是它适用于您的测试用例 现场演示

  • 我有一棵看起来像上面的树,由一个链接结构表示: 我的目标是找到从根节点到叶节点的所有路径。 我的树遍历算法如下所示: 当我运行它时,我确信树正在按图所示构建。我已经测试过了。然而,我无法找出我的树遍历分割错误的原因。 我得到的输出是: 我已经在高度较小的树上测试了它,它是有效的。但是出于某种原因,它不适用于高度大于2的树。我认为这是树出了问题,我检查并打印了每个父级、左子级和右子级,它们打印出来如

  • 本文向大家介绍php获取json数据所有的节点路径,包括了php获取json数据所有的节点路径的使用技巧和注意事项,需要的朋友参考一下 之前我们讲解过使用javascript获取json数据节点路径的问题,今天我们更进一步,讲解下php获取json数据所有的节点路径 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 问题内容: 在CSS中,任何图像路径都相对于CSS文件位置。 f.ex如果我放入CSS文件并使用类似 浏览器将查找有意义的图像。 是否可以在javascript中做同样的事情? F.ex如果我包括以下代码并将其放在其中: 找不到图片,因为浏览器使用HTML文件作为起点,而不是脚本位置。我希望能够像CSS一样使用脚本位置作为起点。 这可能吗? 问题答案: 按照上面的方法在DOM中搜索您自己的标记是可