krpano修改tour.xml删除某个场景

本文介绍如何使用Java代码来定位并删除krpano虚拟漫游软件生成的tour.xml文件中的特定场景节点。通过解析XML文件并利用SAXReader进行节点选择,实现了精确删除指定场景的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用krpano的krpanotools生成场景列表后,得到tour.xml,可以看到文件内容是这样的(这里只展示场景列表的内容,name和title是自定义修改后的):

  <scene name="scene_153569621085135" title="123" onstart="" thumburl="panos/153569621085135.tiles/thumb.jpg" lat="" lng="" heading="">
    <view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="140" limitview="auto"/>
    <preview url="panos/153569621085135.tiles/preview.jpg"/>
    <image>
      <cube url="panos/153569621085135.tiles/pano_%s.jpg"/>
    </image>
  </scene>
  <scene name="scene_153569622468835" title="123" onstart="" thumburl="panos/153569622468835.tiles/thumb.jpg" lat="" lng="" heading="">
    <view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="140" limitview="auto"/>
    <preview url="panos/153569622468835.tiles/preview.jpg"/>
    <image>
      <cube url="panos/153569622468835.tiles/pano_%s.jpg"/>
    </image>
  </scene>
  <scene name="scene_153569623181035" title="345" onstart="" thumburl="panos/153569623181035.tiles/thumb.jpg" lat="" lng="" heading="">
    <view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="140" limitview="auto"/>
    <preview url="panos/153569623181035.tiles/preview.jpg"/>
    <image>
      <cube url="panos/153569623181035.tiles/pano_%s.jpg"/>
    </image>
  </scene>
  <scene name="scene_153569623879735" title="567567" onstart="" thumburl="panos/153569623879735.tiles/thumb.jpg" lat="" lng="" heading="">
    <view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="140" limitview="auto"/>
    <preview url="panos/153569623879735.tiles/preview.jpg"/>
    <image>
      <cube url="panos/153569623879735.tiles/pano_%s.jpg"/>
    </image>
  </scene>

用Java解析XML并进行删除操作

private boolean removeScene4XML(String name, HttpServletRequest request, Long vrId) throws Exception {
        String realPath = new File(request.getSession().getServletContext().getRealPath("/")).getParent();
        String xmlPath = realPath + "/vrFiles/vr/" + vrId + "/vtour/tour.xml"; //找到自己的XML文件路径
            String backupPath = realPath + "/vrFiles/vr/" + vrId + "/vtour/tour_tmp.xml"; //这个是备份路径,这里用不上可以不用理
        try {
            // 删除操作
            File XmlFile = new File(xmlPath);
            SAXReader saxReader = new SAXReader();
            Document doc = saxReader.read(XmlFile);
            List<Element> list = doc.selectNodes("/krpano"); //找到根节点
            for (Element element : list) {
                Iterator it = element.elementIterator("scene"); //找到场景节点
                while (it.hasNext()) {
                    Element es = (Element) it.next();
                    if(Utils.isNotEmpty(es.attributeValue("name")) && es.attributeValue("name").equals("scene_"+name)) { //匹配传进来的场景名称
                        element.remove(es);  //删除该节点
                    }
                }
            }
            // 输出格式
            OutputFormat outformat = new OutputFormat();
            // 指定XML编码
            outformat.setEncoding("UTF-8");
            outformat.setNewlines(true);
            outformat.setIndent(true);
            outformat.setTrimText(true);
            OutputStream out = new FileOutputStream(XmlFile);
            XMLWriter xmlwriter = new XMLWriter(out, outformat);
            xmlwriter.write(doc);
            xmlwriter.close();
            return true;
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        return false;
    }

这样就可以删除tour.xml中自己想要删除的节点了。

MoonJo笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值