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

Java:读取具有动态结构的XML文件

郁明诚
2023-03-14

在我的项目中,我有几个不同结构的存储库xml文件。例如:

common.xml

<general>    
    <youTube>https://www.youtube.com/</youTube>     
    <eBay>https://www.ebay.com/</eBay>  
    <trollPic>https://mallofnorway.com/content/uploads/2020/07/008840118.jpg</trollPic>
    <ui>
        <multiValueAtt>Gender</multiValueAtt>
    </ui>
    <api>
        <ownerId>1e1b3a81-8f9a-4126-890a-109694e9fd7c</ownerId>
        <schemaId>4cbacf2e-8f3f-4c0b-9764-d88d302d279f</schemaId>
    </api>
</general>  

partner.xml

<general>
    <ui>
        <partner>
            <schema>
                <multiValueAttr>Gender</multiValueAttr>
            </schema>            
        </partner>
        <member>
            <schema>
                <multiValueAttr>Department</multiValueAttr>
            </schema>            
        </member>
    </ui>
</general>  

我需要做一个函数从所有这些文件中获取值。因此,我理解我需要将xml文件位置和在该文件中查找的指定标记名传递给我的函数,可能还需要传递到该标记/字符串的xml路径。所以我想方法调用应该类似于GetConfigParam('./some-file.xml','ui.partner.schema.multiValueAttr');
我知道如何读取简单的xml文件:

static public String objRepository(String fileName, String area, String key){
    try{
        String rootPath = Paths.get(".").toAbsolutePath().normalize().toString();
        String path = rootPath + "\\src\\main\\resources\\repository\\" + fileName + ".xml";
        File file=new File(path);
        DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
        DocumentBuilder db=dbf.newDocumentBuilder();
        Document doc=db.parse(file);
        doc.getDocumentElement().normalize();
        //System.out.println("The node name is: "+doc.getDocumentElement().getNodeName());

        NodeList nList=doc.getElementsByTagName(area);
        //System.out.println("The length is: "+nList.getLength());
        for(int i=0; i<nList.getLength(); i++){
            Node nNode=nList.item(i);
            if(nNode.getNodeType()==Node.ELEMENT_NODE){
                Element ele=(Element) nNode;
                return ele.getElementsByTagName(key).item(i).getTextContent();
            }
        }

    }catch(Exception e){
        e.printStackTrace();
    }
    return "";
}

我还知道如何读取具有常量结构的嵌套XML文件,但我不知道如何用相同的方法读取具有不同结构的嵌套XML文件。

共有1个答案

阴英武
2023-03-14

您应该了解一下XPath。听起来你并不真正关心大部分内容,只关心一些特定的元素(你知道其中的路径)。这意味着您可以简单地以通用的方式读取XML并使用XPath提取所需的值。下面是Baeldung关于这个主题的一篇优秀文章的一个例子:

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(this.getFile());
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "/Tutorials/Tutorial[@tutId=" + "'" + id + "'" + "]";
node = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE);
 类似资料:
  • 问题内容: 我试图从XML文件中读取一些数据,但遇到麻烦,我拥有的XML如下: 我试图将这些值作为字符串读取到我的Java程序中,到目前为止,我已经编写了以下代码: 我正在努力读取实际的字符串值。 问题答案: 可能的实现之一: 与XML内容一起使用时: 结果并分配给上述和参考。

  • 问题内容: 我想使用创建文件。 我的文件结构: 问题答案: 您可以在Java中使用JDOM库。将标签定义为Element对象,使用Document Class 记录元素,并使用SAXBuilder构建xml文件。试试这个例子:

  • 问题内容: 我正在一个项目中使用JSON作为创建Java对象的配置框架。这也是我来自CF / PHP / JS等方面多年经验的第一个专业Java项目。 在将JSON转换为Java时,我能找到的所有资源都基于以下想法:您必须先在Java中手动构建对象,即POJO,然后使用JSON进行填充。 作为网络语言的资深人士,我对此想法感到窒息。我发现编译后的语言起着不同的作用,但是我认为从命令行到机器语言的共

  • 我的猜测是我没有以正确的方式声明模式文档,但我不知道错误到底在哪里。我做错了什么?

  • 本文向大家介绍JS通过ajax动态读取xml文件内容的方法,包括了JS通过ajax动态读取xml文件内容的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS通过ajax动态读取xml文件内容的方法。分享给大家供大家参考。具体分析如下: 下面的JS代码读取note.xml文件,并填充显示相关字段 HTML文件代码如下 xml文件内容如下 希望本文所述对大家的javascript程序设计

  • 下面提供了要阅读的文本文件- 上下文:开发 地区:亚洲 叶子:全部 项目:(这是项目列表) 名称:集线器 主题: (项目内主题列表) 数据类型:0 名称:疾病预防控制中心 计划:开发机架 数据类型:0.dlq 名称:疾病预防控制中心 计划:机架 数据类型:0 名称:原生态 计划:开发 模式: value.schema.file:-data-hub.raw.0-value-v1.json 值.for