正则表达式/解析XML文件

如何解决正则表达式/解析XML文件

| 我有一个XML文件,其中包含自定义标签包含的一堆数据。这对于我拥有的一个项目都很有用,但是对于另一个项目,我不需要太多信息。因此,我想修剪XML文件,并摆脱某些标签的所有实例以及这些标签之间的所有内容。
<GOBJ>
    <cost>4</cost>
    <duration>n/a</duration>
    <item>Stone Block</item>
    <type>Construction - Material</type>
    <misc>Use these blocks to build things. These blocks don\'t degrade.</misc>
</GOBJ>
我只想保留
[item]blah[item]
[type]blah[type]
,其余的应该删除/删除。 稍后,我将需要检查
[type]
的文本并替换与某些单词匹配的内容。例如,如果“金属”一词在
[type]
标签内的任何位置,则仅用金属一词替换该标签的内容。 我知道这是一个很大的要求;感谢您的帮助。     

解决方法

        另一种方法是仅使用简单的XML→XML(具有XPath 1.0的XSLT 1.0)转换,如下所示。可以轻松适应您的要求并重复使用其他文档。
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">

    <xsl:output method=\"xml\" omit-xml-declaration=\"yes\" indent=\"yes\"/>

    <xsl:template match=\"root\">
        <root>
            <xsl:apply-templates select=\"GOBJ\"/>
        </root>
    </xsl:template>

    <xsl:template match=\"GOBJ\">
        <GOBJ>
            <xsl:copy-of select=\"item\"/>
            <type>
                <xsl:choose>
                    <xsl:when test=\"contains(type,\'metal\')\">
                        <xsl:text>metal</xsl:text>
                    </xsl:when>
                    <!-- other xsl:when conditions here -->
                    <xsl:otherwise>
                        <xsl:value-of select=\"type\"/>
                    </xsl:otherwise>
                </xsl:choose>
            </type>
        </GOBJ>
    </xsl:template>
</xsl:stylesheet>
我知道这不是基于正则表达式的解决方案,但是恕我直言,最好使用面向XML的本机工具箱。     ,        假设文件的布局与您的示例完全相同,并乘以所需的尽可能多的记录,并且您希望保留尽可能多的原始布局,请替换
(<GOBJ>[^<]+?).+?(<item>.+?<\\/type>\\n).+?(<\\/GOBJ>)
$1$2$3
在全局范围内,将正则表达式设置为在\'singleline \'模式下运行,将满足您的要求,仅当元素
<GOBJ>
为大写字母,其他元素为小写字母时,每条记录每个元素只有一个实例,而元素
<item>
始终出现在每个记录中元素“ 10”的紧前面。 在JavaScript中,这将是:
var result = src.replace(
    /(<GOBJ>[^<]+?).+?(<item>.+?<\\/type>\\n).+?(<\\/GOBJ>)/g,\'$1$2$3\'
);
注意,严格的条件减轻了与使用正则表达式解析XML有关的所有问题。如果不能满足这些条件,则使用XML专用工具(如XSLT)将为您提供更好的服务。     ,        这是一个grep解决方案:
grep -E \'(<item>|<type>)\' myfile.xml
    ,        我开发了另一种解决问题的方法;我构建了一个jquery脚本,该脚本拆分了xml代码(我之前用不同的符号替换了所有左/右箭头),并且如果我不包含其他某些符号,则输出数组项。
var name = $(\'div\').text().trim().split(/\\[name\\](.*?)\\[\\/name\\]/g);
var type = $(\'div\').text().trim().split(/\\[type\\](.*?)\\[\\/type\\]/g);
for (i = 0; name.length > i; i++) {
        if ((type[i].match(/\\[/g))) {
            type[i] = \"\";
        }
        if (!(name[i].match(/\\[/g))) {
            if (type[i].match(/construction/g)) {type[i] = \"T_C\";}
            if (type[i].match(/material/g)) {type[i] = \"T_M\";}
            if (type[i].match(/metalwork/g)) {type[i] = \"T_W\";}
            if (type[i].match(/water/g)) {type[i] = \"T_W\";}
            if (type[i].match(/oil/g)) {type[i] = \"T_O\";}
            if (type[i].match(/precious/g)) {type[i] = \"T_P\";}
            if (type[i].match(/magic/g)) {type[i] = \"T_M\";}
            $(\'.Collect\').append(\'<p>a href=\"../Img/XXX/\' + name[i] + \'.jpg\" class=\"\' + type[i] + \'\">\' + name[i] + \'/a></p>\');
        } else {
            name[i] = \"\";
        }

    }
以这种方式格式化输出,以便我可以将页面复制粘贴到txt / html文件中,并按我的需要进行复制。我必须想办法用适当的目录名称替换XXX ... 我只需要执行一次或两次,因此纯自动化不是必须的。     ,        如果要解析XML日志文件,则可以使用正则表达式{java},为
<[^<]+<
。因此,您将获得
<name>DEV</name>
。输出类似于name> DEV。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-