?" /> 如何读取和更改 xml 树枝中的 <!Doctype> 标签和 <?xml version="1.0"?> ?

如何读取和更改 xml 树枝中的 标签和

2024-02-07

我是 xml twig 的新手...如何阅读和更改<!DOCTYPE article SYSTEM "loose.dtd"> and <?xml version="1.0" encoding="UTF-8"?>。我如何修改这个标签..因为我不知道如何在 xml::Twig 中读取和更改这个标签...

我的输入:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE art SYSTEM "loose.dtd">
<art>
<fr>
<p>Text</p>
<p>Text</p>
</fr>
<fr>
<p>Text</p>
<p>Text</p>
</fr>
</art>

我需要输出为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DTD>
<Contents type="&lt;!DOCTYPE article SYSTEM &quot;loose.dtd&gt;"/>
</DTD>
<art>
<fr>
<p>Text</p>
<p>Text</p>
</fr>
<fr>
<p>Text</p>
<p>Text</p>
</fr>
</art>

怎样才能改变<?xml ?> and <!Doctype>标签,你能帮助这个过程吗?


您可以尝试以下操作(代码已注释)。理解它的重要一点是创建一个新的twig,复制所有要保留的元素并创建其更改的内容:

#!/usr/bin/env perl

use warnings;
use strict;
use XML::Twig;

## Create a twig based in an input xml file.
my $twig = XML::Twig->new;
$twig->parsefile(shift);

## Create a new twig that will be the output.
my $new_twig = XML::Twig->new( pretty_print => 'indented' );

## Create a root tag.
$new_twig->set_root( XML::Twig::Elt->new( 'root' ) );

## Create the xml processing instruction.
my $e = XML::Twig::Elt->new( 'k' => 'v' );
$e->set_pi( 'xml', 'version="1.0" encoding="UTF-8" standalone="yes"' );
$e->move( before => $new_twig->root );

## Copy the whole tree from the old twig.
my $r = $twig->root;
$r->paste( first_child => $new_twig->root );

## Copy the doctype from the old twig to the new one.
my $contents_elt = XML::Twig::Elt->new( Contents  => { type => $twig->doctype } );
my $dtd_elt = XML::Twig::Elt->new( DTD => '#EMPTY' );
$contents_elt->move( last_child => $dtd_elt );
$dtd_elt->move( first_child => $new_twig->root );

## Print the whole twig created.
$new_twig->print;

像这样运行它:

perl script.pl xmlfile

得出:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?><root>
  <DTD>
    <Contents type="&lt;!DOCTYPE art SYSTEM &quot;loose.dtd&quot;>&#x0a;"/>
  </DTD>
  <art>
    <fr>
      <p>Text</p>
      <p>Text</p>
    </fr>
    <fr>
      <p>Text</p>
      <p>Text</p>
    </fr>
  </art>
</root>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何读取和更改 xml 树枝中的 标签和 ? 的相关文章

随机推荐

  • 自动工具和 -Wl,-whole-archive

    是否可以告诉自动工具使用 Wl whole archive 标志链接库之一 生成文件 am bin PROGRAMS pktanon pktanon SOURCES main cpp pktanon DEPENDENCIES lib LIB
  • JOIN 语句中的 CodeIgniter ActiveRecord 字段名称

    我正在构建一个涉及 JOIN 的查询 这是我第一次使用 Active Record 进行数据库操作 但遇到了一些障碍 我想加入一个名为companies to the users表 这样我就可以获取用户所在的公司名称等 我已经成功地完成了这
  • 如何从xpath表达式获取真实的节点顺序(java)

    如果我有一个使用的 XPath 表达式preceding sibling 我得到NodeList顺序不正确 我怎样才能得到正确的订单 例子
  • 通过 JNI 高效传递大型 C 结构

    我有一个大型 C 结构 大约 40 个成员 int 和 char 我必须将其通过 JNI 传递到 Java 端以进行进一步处理 这种情况反复发生 我已经把GetMethodID 等进入init 函数在 C 端 所以我只需调用它们一次 什么是
  • 带重音符号的 MailMessage 附件文件名

    我正在尝试发送带有附加 Excel 文件名的 HTML 电子邮件 一切都运行良好 直到我需要发送附件名称包含重音字母的邮件 我尝试过的每个解决方法都惨败 原始代码 var attachment new Attachment new Memo
  • Java 浮点除法的显式类型转换

    我不确定选项 4 除法 中的浮点除法是否使用显式类型转换 我需要一些帮助来理解什么是浮点除法 我必须使用整数来存储 2 个操作数 使用双精度数来存储结果 您必须对选项 4 中的浮点除法使用显式类型转换 还可以使用 switch 语句来处理菜
  • 如何从 Asp.Net Core 视图组件返回错误的 HTTP 状态代码

    我试图从 Asp Net Core 中的视图组件返回 HTTP 500 或 BadRequest 结果 但是此返回类型似乎不适用于视图组件 状态代码返回类型是否可用于视图组件 或者我的设计是否错误 我正在通过 ajax 调用我的控制器操作
  • 将 VLOOKUP 结果连接到 Google 表格中的一个字符串中

    我的 Google 电子表格有以下任务 在某个 id 右侧的所有单元格中加入字符串 用不同的方式表述 SELECT A JOIN B GROUP BY A WHERE A myid 如果 JOIN 是一个聚合函数 或者换句话说 JOIN V
  • C++ 在循环中实例化模板

    我有一个工厂类 它需要实例化几个带有连续模板参数的模板 这些模板参数是简单的整数 如何在不展开整个循环的情况下实例化此类模板函数 唯一能想到的就是使用boost预处理器 您能推荐其他不依赖于预处理器的东西吗 thanks 模板参数必须是编译
  • 如何从命令行启用“std=c++0x”?

    我试图生成遵循离散分布的随机数 并找到了此链接 http www cplusplus com reference random discrete distribution http www cplusplus com reference r
  • 如何从列表视图上的所选项目中提取文本

    我有一个包含一些项目的列表视图 我想从所选项目中获取文本 这是我的列表适配器和 onItemClickListener ListView lv ListView findViewById R id listView1 lv setAdapt
  • 异常消息是在数据上下文类型上有一个顶级 IQueryable 属性,其元素类型不是实体类型

    我正在构建一个托管在 IIS 7 中的 WCFDataService 我将使用 Reflection Provider 作为数据源提供程序 如果我将实体类型定义保留在定义服务的同一程序集中 我的项目可以工作 但如果我将实体类型移动到另一个引
  • iOS应用程序需要arm64吗?

    我将我的应用程序上传到 Xcode 其中显示构建需要 arm64 这不包括 iPhone 5 5c 及更低版本使用该应用程序 但是 我希望 iPhone 5 5c 能够使用该应用程序 并且一定错误地要求了 arm64 我认为它一定是 inf
  • 如何使应用程序受 Outlook 信任

    我创建了一个正在阅读 Outlook 邮件的应用程序 但是当用户在系统中安装该应用程序并运行它时 Outlook 中会弹出 某些外部应用程序想要访问您的 Outlook 您要授予访问权限吗 如何使我的应用程序受 Outlook 信任 一种方
  • 我应该在渲染到 HTML5 画布之前剔除元素还是让画布剔除

    我应该在调用画布绘制方法之前剔除元素还是让画布处理剔除 我应该实现如下逻辑 if circle x circle radius gt 0 circle x circle radius
  • 准备好的语句删除前导零[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我试图在我的数据库中输入一个电话号码 该列设置为 varchar 15 并且在 phpMyAdmin 中它将接受一个以 0 开头的电话号码
  • C 中管道命令的问题

    我正在尝试用 C 语言为 Unix 创建一个简单的 shell 我已经能够完成所有命令的解析和执行 但我遇到了管道问题 我认为问题在于我没有连接到正确的管道来输入第二个命令 例如 如果我输入 ls wc 它会在 wc 命令之后暂停 我认为这
  • AndroidJUnit4.class + org.junit.Assume.assumeTrue = AsclusionViolatedException

    我已经成功地将我的 Android 项目转换为 JUnit4 当然我想要这样做的主要原因是不起作用 如果有人在这里有想法 我会很乐意提供帮助 我试图解决的问题是 如果构建未指向登台服务器 我想自动跳过某些测试 我已经设置了这个BUILD T
  • 错误未定义对“std::__ndk1::locale::~locale()”的引用

    我在使用编译代码时遇到问题适用于 Android 的提升 https github com moritz wundke Boost for Android使用 Android Studio ndk 我正在使用 boost 中的 libboo
  • 如何读取和更改 xml 树枝中的 标签和

    我是 xml twig 的新手 如何阅读和更改 and 我如何修改这个标签 因为我不知道如何在 xml Twig 中读取和更改这个标签 我的输入